# -*- coding: utf-8 -*-
# Generated by https://github.com/connectrpc/connect-python.  DO NOT EDIT!
# source: chatto/api/v1/rooms.proto

from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping
from typing import Protocol

from connectrpc.client import ConnectClient, ConnectClientSync
from connectrpc.code import Code
from connectrpc.compression import Compression
from connectrpc.errors import ConnectError
from connectrpc.interceptor import Interceptor, InterceptorSync
from connectrpc.method import IdempotencyLevel, MethodInfo
from connectrpc.request import Headers, RequestContext
from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync
import chatto.api.v1.member_directory_pb2 as chatto_dot_api_dot_v1_dot_member__directory__pb2
import chatto.api.v1.read_state_pb2 as chatto_dot_api_dot_v1_dot_read__state__pb2
import chatto.api.v1.room_timeline_pb2 as chatto_dot_api_dot_v1_dot_room__timeline__pb2
import chatto.api.v1.rooms_pb2 as chatto_dot_api_dot_v1_dot_rooms__pb2


class RoomService(Protocol):
    async def create_room(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.CreateRoomRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.CreateRoomResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")

    async def update_room(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateRoomRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateRoomResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")

    async def archive_room(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.ArchiveRoomRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.ArchiveRoomResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")

    async def unarchive_room(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.UnarchiveRoomRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.UnarchiveRoomResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")

    async def join_room(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")

    async def join_room_group(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomGroupRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomGroupResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")

    async def start_d_m(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.StartDMRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.StartDMResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")

    async def leave_room(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.LeaveRoomRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.LeaveRoomResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")

    async def list_members(self, request: chatto_dot_api_dot_v1_dot_member__directory__pb2.ListRoomMembersRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_member__directory__pb2.ListRoomMembersResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")

    async def get_member(self, request: chatto_dot_api_dot_v1_dot_member__directory__pb2.GetRoomMemberRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_member__directory__pb2.GetRoomMemberResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")

    async def batch_get_members(self, request: chatto_dot_api_dot_v1_dot_member__directory__pb2.BatchGetRoomMembersRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_member__directory__pb2.BatchGetRoomMembersResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")

    async def add_member(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.AddMemberRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.AddMemberResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")

    async def remove_member(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.RemoveMemberRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.RemoveMemberResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")

    async def list_bans(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.ListBansRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.ListBansResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")

    async def list_room_attachments(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.ListRoomAttachmentsRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.ListRoomAttachmentsResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")

    async def update_typing_indicator(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateTypingIndicatorRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateTypingIndicatorResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")

    async def get_room_events(self, request: chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")

    async def get_room_events_around(self, request: chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsAroundRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsAroundResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")

    async def mark_room_as_read(self, request: chatto_dot_api_dot_v1_dot_read__state__pb2.MarkRoomAsReadRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_read__state__pb2.MarkRoomAsReadResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")

    async def ban_member(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.BanMemberRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.BanMemberResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")

    async def unban_member(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.UnbanMemberRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.UnbanMemberResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")


class RoomServiceASGIApplication(ConnectASGIApplication[RoomService]):
    def __init__(self, service: RoomService | AsyncGenerator[RoomService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None) -> None:
        super().__init__(
            service=service,
            endpoints=lambda svc: {
                "/chatto.api.v1.RoomService/CreateRoom": Endpoint.unary(
                    method=MethodInfo(
                        name="CreateRoom",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.CreateRoomRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.CreateRoomResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=svc.create_room,
                ),
                "/chatto.api.v1.RoomService/UpdateRoom": Endpoint.unary(
                    method=MethodInfo(
                        name="UpdateRoom",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateRoomRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateRoomResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=svc.update_room,
                ),
                "/chatto.api.v1.RoomService/ArchiveRoom": Endpoint.unary(
                    method=MethodInfo(
                        name="ArchiveRoom",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.ArchiveRoomRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.ArchiveRoomResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=svc.archive_room,
                ),
                "/chatto.api.v1.RoomService/UnarchiveRoom": Endpoint.unary(
                    method=MethodInfo(
                        name="UnarchiveRoom",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.UnarchiveRoomRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.UnarchiveRoomResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=svc.unarchive_room,
                ),
                "/chatto.api.v1.RoomService/JoinRoom": Endpoint.unary(
                    method=MethodInfo(
                        name="JoinRoom",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=svc.join_room,
                ),
                "/chatto.api.v1.RoomService/JoinRoomGroup": Endpoint.unary(
                    method=MethodInfo(
                        name="JoinRoomGroup",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomGroupRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomGroupResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=svc.join_room_group,
                ),
                "/chatto.api.v1.RoomService/StartDM": Endpoint.unary(
                    method=MethodInfo(
                        name="StartDM",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.StartDMRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.StartDMResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=svc.start_d_m,
                ),
                "/chatto.api.v1.RoomService/LeaveRoom": Endpoint.unary(
                    method=MethodInfo(
                        name="LeaveRoom",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.LeaveRoomRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.LeaveRoomResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=svc.leave_room,
                ),
                "/chatto.api.v1.RoomService/ListMembers": Endpoint.unary(
                    method=MethodInfo(
                        name="ListMembers",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_member__directory__pb2.ListRoomMembersRequest,
                        output=chatto_dot_api_dot_v1_dot_member__directory__pb2.ListRoomMembersResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=svc.list_members,
                ),
                "/chatto.api.v1.RoomService/GetMember": Endpoint.unary(
                    method=MethodInfo(
                        name="GetMember",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_member__directory__pb2.GetRoomMemberRequest,
                        output=chatto_dot_api_dot_v1_dot_member__directory__pb2.GetRoomMemberResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=svc.get_member,
                ),
                "/chatto.api.v1.RoomService/BatchGetMembers": Endpoint.unary(
                    method=MethodInfo(
                        name="BatchGetMembers",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_member__directory__pb2.BatchGetRoomMembersRequest,
                        output=chatto_dot_api_dot_v1_dot_member__directory__pb2.BatchGetRoomMembersResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=svc.batch_get_members,
                ),
                "/chatto.api.v1.RoomService/AddMember": Endpoint.unary(
                    method=MethodInfo(
                        name="AddMember",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.AddMemberRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.AddMemberResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=svc.add_member,
                ),
                "/chatto.api.v1.RoomService/RemoveMember": Endpoint.unary(
                    method=MethodInfo(
                        name="RemoveMember",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.RemoveMemberRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.RemoveMemberResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=svc.remove_member,
                ),
                "/chatto.api.v1.RoomService/ListBans": Endpoint.unary(
                    method=MethodInfo(
                        name="ListBans",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.ListBansRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.ListBansResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=svc.list_bans,
                ),
                "/chatto.api.v1.RoomService/ListRoomAttachments": Endpoint.unary(
                    method=MethodInfo(
                        name="ListRoomAttachments",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.ListRoomAttachmentsRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.ListRoomAttachmentsResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=svc.list_room_attachments,
                ),
                "/chatto.api.v1.RoomService/UpdateTypingIndicator": Endpoint.unary(
                    method=MethodInfo(
                        name="UpdateTypingIndicator",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateTypingIndicatorRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateTypingIndicatorResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=svc.update_typing_indicator,
                ),
                "/chatto.api.v1.RoomService/GetRoomEvents": Endpoint.unary(
                    method=MethodInfo(
                        name="GetRoomEvents",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsRequest,
                        output=chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=svc.get_room_events,
                ),
                "/chatto.api.v1.RoomService/GetRoomEventsAround": Endpoint.unary(
                    method=MethodInfo(
                        name="GetRoomEventsAround",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsAroundRequest,
                        output=chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsAroundResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=svc.get_room_events_around,
                ),
                "/chatto.api.v1.RoomService/MarkRoomAsRead": Endpoint.unary(
                    method=MethodInfo(
                        name="MarkRoomAsRead",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_read__state__pb2.MarkRoomAsReadRequest,
                        output=chatto_dot_api_dot_v1_dot_read__state__pb2.MarkRoomAsReadResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=svc.mark_room_as_read,
                ),
                "/chatto.api.v1.RoomService/BanMember": Endpoint.unary(
                    method=MethodInfo(
                        name="BanMember",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.BanMemberRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.BanMemberResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=svc.ban_member,
                ),
                "/chatto.api.v1.RoomService/UnbanMember": Endpoint.unary(
                    method=MethodInfo(
                        name="UnbanMember",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.UnbanMemberRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.UnbanMemberResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=svc.unban_member,
                ),
            },
            interceptors=interceptors,
            read_max_bytes=read_max_bytes,
            compressions=compressions,
        )

    @property
    def path(self) -> str:
        """Returns the URL path to mount the application to when serving multiple applications."""
        return "/chatto.api.v1.RoomService"


class RoomServiceClient(ConnectClient):
    async def create_room(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.CreateRoomRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.CreateRoomResponse:
        return await self.execute_unary(
            request=request,
            method=MethodInfo(
                name="CreateRoom",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.CreateRoomRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.CreateRoomResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    async def update_room(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateRoomRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateRoomResponse:
        return await self.execute_unary(
            request=request,
            method=MethodInfo(
                name="UpdateRoom",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateRoomRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateRoomResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    async def archive_room(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.ArchiveRoomRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.ArchiveRoomResponse:
        return await self.execute_unary(
            request=request,
            method=MethodInfo(
                name="ArchiveRoom",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.ArchiveRoomRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.ArchiveRoomResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    async def unarchive_room(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.UnarchiveRoomRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.UnarchiveRoomResponse:
        return await self.execute_unary(
            request=request,
            method=MethodInfo(
                name="UnarchiveRoom",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.UnarchiveRoomRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.UnarchiveRoomResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    async def join_room(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomResponse:
        return await self.execute_unary(
            request=request,
            method=MethodInfo(
                name="JoinRoom",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    async def join_room_group(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomGroupRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomGroupResponse:
        return await self.execute_unary(
            request=request,
            method=MethodInfo(
                name="JoinRoomGroup",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomGroupRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomGroupResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    async def start_d_m(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.StartDMRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.StartDMResponse:
        return await self.execute_unary(
            request=request,
            method=MethodInfo(
                name="StartDM",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.StartDMRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.StartDMResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    async def leave_room(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.LeaveRoomRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.LeaveRoomResponse:
        return await self.execute_unary(
            request=request,
            method=MethodInfo(
                name="LeaveRoom",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.LeaveRoomRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.LeaveRoomResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    async def list_members(
        self,
        request: chatto_dot_api_dot_v1_dot_member__directory__pb2.ListRoomMembersRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_member__directory__pb2.ListRoomMembersResponse:
        return await self.execute_unary(
            request=request,
            method=MethodInfo(
                name="ListMembers",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_member__directory__pb2.ListRoomMembersRequest,
                output=chatto_dot_api_dot_v1_dot_member__directory__pb2.ListRoomMembersResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    async def get_member(
        self,
        request: chatto_dot_api_dot_v1_dot_member__directory__pb2.GetRoomMemberRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_member__directory__pb2.GetRoomMemberResponse:
        return await self.execute_unary(
            request=request,
            method=MethodInfo(
                name="GetMember",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_member__directory__pb2.GetRoomMemberRequest,
                output=chatto_dot_api_dot_v1_dot_member__directory__pb2.GetRoomMemberResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    async def batch_get_members(
        self,
        request: chatto_dot_api_dot_v1_dot_member__directory__pb2.BatchGetRoomMembersRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_member__directory__pb2.BatchGetRoomMembersResponse:
        return await self.execute_unary(
            request=request,
            method=MethodInfo(
                name="BatchGetMembers",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_member__directory__pb2.BatchGetRoomMembersRequest,
                output=chatto_dot_api_dot_v1_dot_member__directory__pb2.BatchGetRoomMembersResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    async def add_member(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.AddMemberRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.AddMemberResponse:
        return await self.execute_unary(
            request=request,
            method=MethodInfo(
                name="AddMember",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.AddMemberRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.AddMemberResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    async def remove_member(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.RemoveMemberRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.RemoveMemberResponse:
        return await self.execute_unary(
            request=request,
            method=MethodInfo(
                name="RemoveMember",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.RemoveMemberRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.RemoveMemberResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    async def list_bans(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.ListBansRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.ListBansResponse:
        return await self.execute_unary(
            request=request,
            method=MethodInfo(
                name="ListBans",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.ListBansRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.ListBansResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    async def list_room_attachments(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.ListRoomAttachmentsRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.ListRoomAttachmentsResponse:
        return await self.execute_unary(
            request=request,
            method=MethodInfo(
                name="ListRoomAttachments",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.ListRoomAttachmentsRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.ListRoomAttachmentsResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    async def update_typing_indicator(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateTypingIndicatorRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateTypingIndicatorResponse:
        return await self.execute_unary(
            request=request,
            method=MethodInfo(
                name="UpdateTypingIndicator",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateTypingIndicatorRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateTypingIndicatorResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    async def get_room_events(
        self,
        request: chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsResponse:
        return await self.execute_unary(
            request=request,
            method=MethodInfo(
                name="GetRoomEvents",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsRequest,
                output=chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    async def get_room_events_around(
        self,
        request: chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsAroundRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsAroundResponse:
        return await self.execute_unary(
            request=request,
            method=MethodInfo(
                name="GetRoomEventsAround",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsAroundRequest,
                output=chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsAroundResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    async def mark_room_as_read(
        self,
        request: chatto_dot_api_dot_v1_dot_read__state__pb2.MarkRoomAsReadRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_read__state__pb2.MarkRoomAsReadResponse:
        return await self.execute_unary(
            request=request,
            method=MethodInfo(
                name="MarkRoomAsRead",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_read__state__pb2.MarkRoomAsReadRequest,
                output=chatto_dot_api_dot_v1_dot_read__state__pb2.MarkRoomAsReadResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    async def ban_member(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.BanMemberRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.BanMemberResponse:
        return await self.execute_unary(
            request=request,
            method=MethodInfo(
                name="BanMember",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.BanMemberRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.BanMemberResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    async def unban_member(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.UnbanMemberRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.UnbanMemberResponse:
        return await self.execute_unary(
            request=request,
            method=MethodInfo(
                name="UnbanMember",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.UnbanMemberRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.UnbanMemberResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )


class RoomServiceSync(Protocol):
    def create_room(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.CreateRoomRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.CreateRoomResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
    def update_room(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateRoomRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateRoomResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
    def archive_room(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.ArchiveRoomRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.ArchiveRoomResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
    def unarchive_room(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.UnarchiveRoomRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.UnarchiveRoomResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
    def join_room(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
    def join_room_group(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomGroupRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomGroupResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
    def start_d_m(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.StartDMRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.StartDMResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
    def leave_room(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.LeaveRoomRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.LeaveRoomResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
    def list_members(self, request: chatto_dot_api_dot_v1_dot_member__directory__pb2.ListRoomMembersRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_member__directory__pb2.ListRoomMembersResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
    def get_member(self, request: chatto_dot_api_dot_v1_dot_member__directory__pb2.GetRoomMemberRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_member__directory__pb2.GetRoomMemberResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
    def batch_get_members(self, request: chatto_dot_api_dot_v1_dot_member__directory__pb2.BatchGetRoomMembersRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_member__directory__pb2.BatchGetRoomMembersResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
    def add_member(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.AddMemberRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.AddMemberResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
    def remove_member(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.RemoveMemberRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.RemoveMemberResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
    def list_bans(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.ListBansRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.ListBansResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
    def list_room_attachments(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.ListRoomAttachmentsRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.ListRoomAttachmentsResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
    def update_typing_indicator(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateTypingIndicatorRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateTypingIndicatorResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
    def get_room_events(self, request: chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
    def get_room_events_around(self, request: chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsAroundRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsAroundResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
    def mark_room_as_read(self, request: chatto_dot_api_dot_v1_dot_read__state__pb2.MarkRoomAsReadRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_read__state__pb2.MarkRoomAsReadResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
    def ban_member(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.BanMemberRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.BanMemberResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")
    def unban_member(self, request: chatto_dot_api_dot_v1_dot_rooms__pb2.UnbanMemberRequest, ctx: RequestContext) -> chatto_dot_api_dot_v1_dot_rooms__pb2.UnbanMemberResponse:
        raise ConnectError(Code.UNIMPLEMENTED, "Not implemented")


class RoomServiceWSGIApplication(ConnectWSGIApplication):
    def __init__(self, service: RoomServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None) -> None:
        super().__init__(
            endpoints={
                "/chatto.api.v1.RoomService/CreateRoom": EndpointSync.unary(
                    method=MethodInfo(
                        name="CreateRoom",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.CreateRoomRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.CreateRoomResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=service.create_room,
                ),
                "/chatto.api.v1.RoomService/UpdateRoom": EndpointSync.unary(
                    method=MethodInfo(
                        name="UpdateRoom",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateRoomRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateRoomResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=service.update_room,
                ),
                "/chatto.api.v1.RoomService/ArchiveRoom": EndpointSync.unary(
                    method=MethodInfo(
                        name="ArchiveRoom",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.ArchiveRoomRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.ArchiveRoomResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=service.archive_room,
                ),
                "/chatto.api.v1.RoomService/UnarchiveRoom": EndpointSync.unary(
                    method=MethodInfo(
                        name="UnarchiveRoom",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.UnarchiveRoomRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.UnarchiveRoomResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=service.unarchive_room,
                ),
                "/chatto.api.v1.RoomService/JoinRoom": EndpointSync.unary(
                    method=MethodInfo(
                        name="JoinRoom",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=service.join_room,
                ),
                "/chatto.api.v1.RoomService/JoinRoomGroup": EndpointSync.unary(
                    method=MethodInfo(
                        name="JoinRoomGroup",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomGroupRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomGroupResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=service.join_room_group,
                ),
                "/chatto.api.v1.RoomService/StartDM": EndpointSync.unary(
                    method=MethodInfo(
                        name="StartDM",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.StartDMRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.StartDMResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=service.start_d_m,
                ),
                "/chatto.api.v1.RoomService/LeaveRoom": EndpointSync.unary(
                    method=MethodInfo(
                        name="LeaveRoom",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.LeaveRoomRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.LeaveRoomResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=service.leave_room,
                ),
                "/chatto.api.v1.RoomService/ListMembers": EndpointSync.unary(
                    method=MethodInfo(
                        name="ListMembers",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_member__directory__pb2.ListRoomMembersRequest,
                        output=chatto_dot_api_dot_v1_dot_member__directory__pb2.ListRoomMembersResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=service.list_members,
                ),
                "/chatto.api.v1.RoomService/GetMember": EndpointSync.unary(
                    method=MethodInfo(
                        name="GetMember",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_member__directory__pb2.GetRoomMemberRequest,
                        output=chatto_dot_api_dot_v1_dot_member__directory__pb2.GetRoomMemberResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=service.get_member,
                ),
                "/chatto.api.v1.RoomService/BatchGetMembers": EndpointSync.unary(
                    method=MethodInfo(
                        name="BatchGetMembers",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_member__directory__pb2.BatchGetRoomMembersRequest,
                        output=chatto_dot_api_dot_v1_dot_member__directory__pb2.BatchGetRoomMembersResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=service.batch_get_members,
                ),
                "/chatto.api.v1.RoomService/AddMember": EndpointSync.unary(
                    method=MethodInfo(
                        name="AddMember",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.AddMemberRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.AddMemberResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=service.add_member,
                ),
                "/chatto.api.v1.RoomService/RemoveMember": EndpointSync.unary(
                    method=MethodInfo(
                        name="RemoveMember",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.RemoveMemberRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.RemoveMemberResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=service.remove_member,
                ),
                "/chatto.api.v1.RoomService/ListBans": EndpointSync.unary(
                    method=MethodInfo(
                        name="ListBans",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.ListBansRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.ListBansResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=service.list_bans,
                ),
                "/chatto.api.v1.RoomService/ListRoomAttachments": EndpointSync.unary(
                    method=MethodInfo(
                        name="ListRoomAttachments",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.ListRoomAttachmentsRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.ListRoomAttachmentsResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=service.list_room_attachments,
                ),
                "/chatto.api.v1.RoomService/UpdateTypingIndicator": EndpointSync.unary(
                    method=MethodInfo(
                        name="UpdateTypingIndicator",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateTypingIndicatorRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateTypingIndicatorResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=service.update_typing_indicator,
                ),
                "/chatto.api.v1.RoomService/GetRoomEvents": EndpointSync.unary(
                    method=MethodInfo(
                        name="GetRoomEvents",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsRequest,
                        output=chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=service.get_room_events,
                ),
                "/chatto.api.v1.RoomService/GetRoomEventsAround": EndpointSync.unary(
                    method=MethodInfo(
                        name="GetRoomEventsAround",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsAroundRequest,
                        output=chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsAroundResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=service.get_room_events_around,
                ),
                "/chatto.api.v1.RoomService/MarkRoomAsRead": EndpointSync.unary(
                    method=MethodInfo(
                        name="MarkRoomAsRead",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_read__state__pb2.MarkRoomAsReadRequest,
                        output=chatto_dot_api_dot_v1_dot_read__state__pb2.MarkRoomAsReadResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=service.mark_room_as_read,
                ),
                "/chatto.api.v1.RoomService/BanMember": EndpointSync.unary(
                    method=MethodInfo(
                        name="BanMember",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.BanMemberRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.BanMemberResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=service.ban_member,
                ),
                "/chatto.api.v1.RoomService/UnbanMember": EndpointSync.unary(
                    method=MethodInfo(
                        name="UnbanMember",
                        service_name="chatto.api.v1.RoomService",
                        input=chatto_dot_api_dot_v1_dot_rooms__pb2.UnbanMemberRequest,
                        output=chatto_dot_api_dot_v1_dot_rooms__pb2.UnbanMemberResponse,
                        idempotency_level=IdempotencyLevel.UNKNOWN,
                    ),
                    function=service.unban_member,
                ),
            },
            interceptors=interceptors,
            read_max_bytes=read_max_bytes,
            compressions=compressions,
        )

    @property
    def path(self) -> str:
        """Returns the URL path to mount the application to when serving multiple applications."""
        return "/chatto.api.v1.RoomService"


class RoomServiceClientSync(ConnectClientSync):
    def create_room(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.CreateRoomRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.CreateRoomResponse:
        return self.execute_unary(
            request=request,
            method=MethodInfo(
                name="CreateRoom",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.CreateRoomRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.CreateRoomResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    def update_room(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateRoomRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateRoomResponse:
        return self.execute_unary(
            request=request,
            method=MethodInfo(
                name="UpdateRoom",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateRoomRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateRoomResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    def archive_room(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.ArchiveRoomRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.ArchiveRoomResponse:
        return self.execute_unary(
            request=request,
            method=MethodInfo(
                name="ArchiveRoom",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.ArchiveRoomRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.ArchiveRoomResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    def unarchive_room(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.UnarchiveRoomRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.UnarchiveRoomResponse:
        return self.execute_unary(
            request=request,
            method=MethodInfo(
                name="UnarchiveRoom",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.UnarchiveRoomRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.UnarchiveRoomResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    def join_room(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomResponse:
        return self.execute_unary(
            request=request,
            method=MethodInfo(
                name="JoinRoom",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    def join_room_group(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomGroupRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomGroupResponse:
        return self.execute_unary(
            request=request,
            method=MethodInfo(
                name="JoinRoomGroup",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomGroupRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.JoinRoomGroupResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    def start_d_m(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.StartDMRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.StartDMResponse:
        return self.execute_unary(
            request=request,
            method=MethodInfo(
                name="StartDM",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.StartDMRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.StartDMResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    def leave_room(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.LeaveRoomRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.LeaveRoomResponse:
        return self.execute_unary(
            request=request,
            method=MethodInfo(
                name="LeaveRoom",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.LeaveRoomRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.LeaveRoomResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    def list_members(
        self,
        request: chatto_dot_api_dot_v1_dot_member__directory__pb2.ListRoomMembersRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_member__directory__pb2.ListRoomMembersResponse:
        return self.execute_unary(
            request=request,
            method=MethodInfo(
                name="ListMembers",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_member__directory__pb2.ListRoomMembersRequest,
                output=chatto_dot_api_dot_v1_dot_member__directory__pb2.ListRoomMembersResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    def get_member(
        self,
        request: chatto_dot_api_dot_v1_dot_member__directory__pb2.GetRoomMemberRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_member__directory__pb2.GetRoomMemberResponse:
        return self.execute_unary(
            request=request,
            method=MethodInfo(
                name="GetMember",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_member__directory__pb2.GetRoomMemberRequest,
                output=chatto_dot_api_dot_v1_dot_member__directory__pb2.GetRoomMemberResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    def batch_get_members(
        self,
        request: chatto_dot_api_dot_v1_dot_member__directory__pb2.BatchGetRoomMembersRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_member__directory__pb2.BatchGetRoomMembersResponse:
        return self.execute_unary(
            request=request,
            method=MethodInfo(
                name="BatchGetMembers",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_member__directory__pb2.BatchGetRoomMembersRequest,
                output=chatto_dot_api_dot_v1_dot_member__directory__pb2.BatchGetRoomMembersResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    def add_member(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.AddMemberRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.AddMemberResponse:
        return self.execute_unary(
            request=request,
            method=MethodInfo(
                name="AddMember",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.AddMemberRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.AddMemberResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    def remove_member(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.RemoveMemberRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.RemoveMemberResponse:
        return self.execute_unary(
            request=request,
            method=MethodInfo(
                name="RemoveMember",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.RemoveMemberRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.RemoveMemberResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    def list_bans(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.ListBansRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.ListBansResponse:
        return self.execute_unary(
            request=request,
            method=MethodInfo(
                name="ListBans",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.ListBansRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.ListBansResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    def list_room_attachments(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.ListRoomAttachmentsRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.ListRoomAttachmentsResponse:
        return self.execute_unary(
            request=request,
            method=MethodInfo(
                name="ListRoomAttachments",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.ListRoomAttachmentsRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.ListRoomAttachmentsResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    def update_typing_indicator(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateTypingIndicatorRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateTypingIndicatorResponse:
        return self.execute_unary(
            request=request,
            method=MethodInfo(
                name="UpdateTypingIndicator",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateTypingIndicatorRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.UpdateTypingIndicatorResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    def get_room_events(
        self,
        request: chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsResponse:
        return self.execute_unary(
            request=request,
            method=MethodInfo(
                name="GetRoomEvents",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsRequest,
                output=chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    def get_room_events_around(
        self,
        request: chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsAroundRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsAroundResponse:
        return self.execute_unary(
            request=request,
            method=MethodInfo(
                name="GetRoomEventsAround",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsAroundRequest,
                output=chatto_dot_api_dot_v1_dot_room__timeline__pb2.GetRoomEventsAroundResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    def mark_room_as_read(
        self,
        request: chatto_dot_api_dot_v1_dot_read__state__pb2.MarkRoomAsReadRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_read__state__pb2.MarkRoomAsReadResponse:
        return self.execute_unary(
            request=request,
            method=MethodInfo(
                name="MarkRoomAsRead",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_read__state__pb2.MarkRoomAsReadRequest,
                output=chatto_dot_api_dot_v1_dot_read__state__pb2.MarkRoomAsReadResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    def ban_member(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.BanMemberRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.BanMemberResponse:
        return self.execute_unary(
            request=request,
            method=MethodInfo(
                name="BanMember",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.BanMemberRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.BanMemberResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )

    def unban_member(
        self,
        request: chatto_dot_api_dot_v1_dot_rooms__pb2.UnbanMemberRequest,
        *,
        headers: Headers | Mapping[str, str] | None = None,
        timeout_ms: int | None = None,
    ) -> chatto_dot_api_dot_v1_dot_rooms__pb2.UnbanMemberResponse:
        return self.execute_unary(
            request=request,
            method=MethodInfo(
                name="UnbanMember",
                service_name="chatto.api.v1.RoomService",
                input=chatto_dot_api_dot_v1_dot_rooms__pb2.UnbanMemberRequest,
                output=chatto_dot_api_dot_v1_dot_rooms__pb2.UnbanMemberResponse,
                idempotency_level=IdempotencyLevel.UNKNOWN,
            ),
            headers=headers,
            timeout_ms=timeout_ms,
        )
