# Copyright (c) 2018 Tulir Asokan
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
from enum import Enum
from typing import List, NewType, NamedTuple
from attr import dataclass
from .primitive import RoomID, RoomAlias, SyncToken, ContentURI
from .util import SerializableAttrs
from .event import Event
[docs]class RoomCreatePreset(Enum):
PRIVATE = "private_chat"
TRUSTED_PRIVATE = "trusted_private_chat"
PUBLIC = "public_chat"
[docs]class RoomDirectoryVisibility(Enum):
PRIVATE = "private"
PUBLIC = "public"
[docs]@dataclass
class RoomAliasInfo(SerializableAttrs['RoomAliasInfo']):
room_id: RoomID = None
servers: List[str] = None
DirectoryPaginationToken = NewType("DirectoryPaginationToken", str)
[docs]@dataclass
class PublicRoomInfo(SerializableAttrs['PublicRoomInfo']):
room_id: RoomID
num_joined_members: int
world_readable: bool
guests_can_join: bool
name: str = None
topic: str = None
avatar_url: ContentURI = None
aliases: List[RoomAlias] = None
canonical_alias: RoomAlias = None
[docs]@dataclass
class RoomDirectoryResponse(SerializableAttrs['RoomDirectoryResponse']):
chunk: List[PublicRoomInfo]
next_batch: DirectoryPaginationToken = None
prev_batch: DirectoryPaginationToken = None
total_room_count_estimate: int = None
PaginatedMessages = NamedTuple("PaginatedMessages", start=SyncToken, end=SyncToken,
events=List[Event])