# Generated by the protocol buffer compiler.  DO NOT EDIT!
# sources: keyapis/preset/v1/keyapis_preset_events_v1.proto, keyapis/preset/v1/keyapis_preset_preset_v1.proto, keyapis/preset/v1/keyapis_preset_system_v1.proto
# plugin: python-betterproto
from dataclasses import dataclass
from datetime import datetime
from typing import (
    TYPE_CHECKING,
    AsyncIterator,
    Dict,
    List,
    Optional,
)

import betterproto
import grpclib
from betterproto.grpc.grpclib_server import ServiceBase

if TYPE_CHECKING:
    import grpclib.server
    from betterproto.grpc.grpclib_client import MetadataLike
    from grpclib.metadata import Deadline


class PresetStatusType(betterproto.Enum):
    """Справочник статусов. # Тип: byte"""

    STATUS_TYPE_UNKNOWN = 0
    """Значение не указано"""

    ACTIVE = 1
    """Активный"""

    ARCHIVE = 2
    """Архивный"""


class PresetSyslogProtocolType(betterproto.Enum):
    """Тип протокола. # Тип: byte"""

    PROTOCOL_TYPE_UNKNOWN = 0
    """Значение не указано"""

    UDP = 1
    """Протокол UDP"""

    TCP = 2
    """Протокол TCP"""


class PresetVideoConfigQualityType(betterproto.Enum):
    """Справочник качеств. # Тип: byte"""

    QUALITY_TYPE_UNKNOWN = 0
    """Значение не указано"""

    HIGH = 1
    """Высокое качество"""

    MEDIUM = 2
    """Среднее качество"""


class PresetFaceRecognitionConfigurationType(betterproto.Enum):
    """Тип конфигурации"""

    CONFIGURATION_TYPE_UNKNOWN = 0
    """Значение не указано"""

    DEFAULT = 1
    """По умолчанию"""


class PresetPagingOrderByType(betterproto.Enum):
    """Справочник типов значений сортировки. # Тип: byte"""

    ORDER_BY_TYPE_UNKNOWN = 0
    """Значение не указано"""

    ID = 1
    """По идентификатору"""

    CREATED_AT = 2
    """По времени создания"""

    CHANGED_AT = 3
    """По времени изменения"""

    RANK = 4
    """
    По рангу для поиска по тексту. Применяется когда передано поле для поиска
    по тексту. В случае если текстовое поле не передано, применяется значение
    по умолчанию
    """


class PresetPagingDirectionType(betterproto.Enum):
    """Справочник типов направлений сортировки. # Тип: byte"""

    DIRECTION_TYPE_UNKNOWN = 0
    """Значение не указано"""

    DESC = 1
    """От большего к меньшему"""

    ASC = 2
    """От меньшего к большему"""


@dataclass(eq=False, repr=False)
class Preset(betterproto.Message):
    """Пресет. Пресет с id=1 является дефолтным пресетом. # Описание модели"""

    id: int = betterproto.int32_field(1)
    """Идентификатор. # Диапазон: 0..2147483647"""

    title: str = betterproto.string_field(2)
    """Наименование. # Диапазон: 3..256"""

    mrf_ids: List[int] = betterproto.int32_field(3)
    """Идентификатор МРФ. # Диапазон: 0..10"""

    rf_ids: List[int] = betterproto.int32_field(4)
    """Идентификатор РФ. # Диапазон: 0..100"""

    description: Optional[str] = betterproto.message_field(
        5, wraps=betterproto.TYPE_STRING
    )
    """Описание. # Диапазон: 3..1024"""

    created_at: datetime = betterproto.message_field(6)
    """Дата и время создания. # Тип: DateTime"""

    changed_at: datetime = betterproto.message_field(7)
    """
    Дата последнего изменения. Заполняется и обновляется сервером. Заполняется
    при создании и изменении. Является версией объекта. # Тип: DateTime
    """

    status_type: "PresetStatusType" = betterproto.enum_field(8)
    """Статус"""

    sip: "PresetSip" = betterproto.message_field(9)
    """Параметр SIP"""

    ntp: "PresetNtp" = betterproto.message_field(10)
    """Параметр NTP"""

    syslog: "PresetSyslog" = betterproto.message_field(11)
    """Параметр Syslog"""

    rooms: List["PresetRoom"] = betterproto.message_field(12)
    """Помещения. # Диапазон: 0..10000"""

    video_config: "PresetVideoConfig" = betterproto.message_field(13)
    """Параметры конфигурации видео"""

    dtmf: List["PresetDtmf"] = betterproto.message_field(14)
    """Параметр DTMF. # Диапазон: 0..64"""

    face_recognition: "PresetFaceRecognition" = betterproto.message_field(15)
    """Распознование лиц"""


@dataclass(eq=False, repr=False)
class PresetSip(betterproto.Message):
    """Параметр SIP"""

    host: str = betterproto.string_field(1)
    """Хост. # Диапазон: 5..256"""

    port: int = betterproto.int32_field(2)
    """Порт. # Диапазон: 1..65536"""

    reg_host: str = betterproto.string_field(3)
    """Хост reg. # Диапазон: 5..256"""

    reg_port: int = betterproto.int32_field(4)
    """Порт reg. # Диапазон: 1..65536"""

    proxy_host: str = betterproto.string_field(5)
    """Хост proxy. # Диапазон: 5..256"""

    proxy_port: int = betterproto.int32_field(6)
    """Порт proxy. # Диапазон: 1..65536"""


@dataclass(eq=False, repr=False)
class PresetNtp(betterproto.Message):
    """Параметр NTP"""

    host: str = betterproto.string_field(1)
    """Хост. # Диапазон: 5..256"""

    port: int = betterproto.int32_field(2)
    """Порт. # Диапазон: 1..65536"""


@dataclass(eq=False, repr=False)
class PresetSyslog(betterproto.Message):
    """Параметр Syslog"""

    host: str = betterproto.string_field(1)
    """Хост. # Диапазон: 5..256"""

    port: int = betterproto.int32_field(2)
    """Порт. # Диапазон: 1..65536"""

    protocol_type: "PresetSyslogProtocolType" = betterproto.enum_field(3)
    """Протокол"""


@dataclass(eq=False, repr=False)
class PresetRoom(betterproto.Message):
    """Помещение"""

    phone: str = betterproto.string_field(1)
    """Номер телефона. # Диапазон: 5..14"""

    num: int = betterproto.int32_field(2)
    """Номер помещения. # Диапазон: 1..10000"""


@dataclass(eq=False, repr=False)
class PresetVideoConfig(betterproto.Message):
    """Параметры конфигурации видео"""

    quality_type: "PresetVideoConfigQualityType" = betterproto.enum_field(1)
    """Тип пресета"""

    rtsp_user: "PresetVideoConfigRtspUser" = betterproto.message_field(2)
    """Пользователь"""


@dataclass(eq=False, repr=False)
class PresetVideoConfigRtspUser(betterproto.Message):
    """Пользователь"""

    username: str = betterproto.string_field(1)
    """Имя пользователя. # Диапазон: 3..256"""

    password: str = betterproto.string_field(2)
    """Пароль. # Диапазон: 3..256"""


@dataclass(eq=False, repr=False)
class PresetDtmf(betterproto.Message):
    """Параметр DTMF"""

    code: str = betterproto.string_field(1)
    """Код. # Диапазон: 1..1"""

    relay_index: int = betterproto.int32_field(2)
    """Индекс реле. # Диапазон: 0..64"""


@dataclass(eq=False, repr=False)
class PresetFaceRecognition(betterproto.Message):
    """Распознование лиц"""

    host: str = betterproto.string_field(1)
    """Адрес"""

    alt_host: str = betterproto.string_field(2)
    """Альтернативный адрес"""

    endpoint: str = betterproto.string_field(3)
    """Путь запроса к серверу"""

    auth_token: str = betterproto.string_field(4)
    """Токен"""

    configuration_type: "PresetFaceRecognitionConfigurationType" = (
        betterproto.enum_field(5)
    )
    """Тип конфигурации"""

    origin_id: str = betterproto.string_field(6)
    """Идентификатор источника в identix"""

    group_ids: List[int] = betterproto.int32_field(7)
    """Идентификаторы групп профилей в identix"""


@dataclass(eq=False, repr=False)
class PresetSavingError(betterproto.Message):
    """
    Ошибка сохранения. Эти проверки выполняются при работе с базой данных и
    сторонними сервисами
    """

    conflict: "PresetSavingErrorConflict" = betterproto.message_field(1, group="reason")
    """Конфликт версий"""

    not_allowed_for_default: "PresetSavingErrorNotAllowedForDefault" = (
        betterproto.message_field(2, group="reason")
    )
    """Запрещено для дефолтного пресета"""


@dataclass(eq=False, repr=False)
class PresetSavingErrorConflict(betterproto.Message):
    """
    Конфликт версий. Причины: - В базе хранится другая версия строки, значения
    changed_at отличаются
    """

    pass


@dataclass(eq=False, repr=False)
class PresetSavingErrorNotAllowedForDefault(betterproto.Message):
    """
    Недоступно для дефолтного пресета. Причины: - Смена статуса на Архивный
    """

    pass


@dataclass(eq=False, repr=False)
class PostPresetRequest(betterproto.Message):
    """Запрос на создание/изменение пресета"""

    data: "Preset" = betterproto.message_field(1)
    """Пресет"""


@dataclass(eq=False, repr=False)
class PostPresetResponse(betterproto.Message):
    """Ответ на запрос на создание/изменение пресета"""

    data: "Preset" = betterproto.message_field(1, group="type")
    """Пресет"""

    error: "PostPresetResponseError" = betterproto.message_field(2, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class PostPresetResponseError(betterproto.Message):
    """Ошибка запроса сохранения пресета"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""

    saving: "PresetSavingError" = betterproto.message_field(2, group="reason")
    """Ошибка сохранения"""


@dataclass(eq=False, repr=False)
class GetPresetListRequest(betterproto.Message):
    """Запрос на получение списка пресетов"""

    filter: "PresetFilter" = betterproto.message_field(1)
    """Фильтр"""

    paging: "PresetPaging" = betterproto.message_field(2, group="pagination")
    """Стандартный постраничный вывод"""


@dataclass(eq=False, repr=False)
class GetPresetRequest(betterproto.Message):
    """Запрос получения пресета"""

    id: int = betterproto.int32_field(1)
    """Идентификатор"""


@dataclass(eq=False, repr=False)
class GetPresetResponse(betterproto.Message):
    """Ответ на запрос получения пресета"""

    data: "Preset" = betterproto.message_field(1, group="type")
    """Пресет"""


@dataclass(eq=False, repr=False)
class GetPresetDefaultRequest(betterproto.Message):
    """Запрос получения дефолтного пресета"""

    pass


@dataclass(eq=False, repr=False)
class GetPresetDefaultResponse(betterproto.Message):
    """Ответ на запрос получения дефолтного пресета"""

    data: "Preset" = betterproto.message_field(1, group="type")
    """Пресет"""


@dataclass(eq=False, repr=False)
class GetPresetListResponse(betterproto.Message):
    """Ответ на получение списка пресетов"""

    data: "Preset" = betterproto.message_field(1, group="type")
    """Пресет"""

    error: "GetPresetListResponseError" = betterproto.message_field(2, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class GetPresetListResponseError(betterproto.Message):
    """Ошибка запроса получения списка пресетов"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class GetPresetCountRequest(betterproto.Message):
    """Запрос получения количества пресетов"""

    filter: "PresetFilter" = betterproto.message_field(1)
    """Фильтр"""


@dataclass(eq=False, repr=False)
class GetPresetCountResponse(betterproto.Message):
    """Ответ на запрос получения количества пресетов"""

    data: int = betterproto.int32_field(1, group="type")
    """Всего пресетов"""

    error: "GetPresetCountResponseError" = betterproto.message_field(2, group="type")
    """Ошибка"""


@dataclass(eq=False, repr=False)
class GetPresetCountResponseError(betterproto.Message):
    """Ошибка запроса получения количества пресетов"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации"""


@dataclass(eq=False, repr=False)
class DeletePresetRequest(betterproto.Message):
    """Запрос удаления пресета"""

    id: int = betterproto.int32_field(1)
    """Идентификатор пресета"""


@dataclass(eq=False, repr=False)
class DeletePresetResponse(betterproto.Message):
    """Ответ на запрос удаления пресета"""

    error: "DeletePresetResponseError" = betterproto.message_field(1, group="type")
    """Ошибка при удалении"""


@dataclass(eq=False, repr=False)
class DeletePresetResponseError(betterproto.Message):
    """Ошибка при удалении"""

    not_allowed_for_default: "DeletePresetResponseErrorNotAllowedForDefault" = (
        betterproto.message_field(1, group="reason")
    )
    """Запрещено для дефолтного пресета"""


@dataclass(eq=False, repr=False)
class DeletePresetResponseErrorNotAllowedForDefault(betterproto.Message):
    """Недоступно для дефолтного пресета"""

    pass


@dataclass(eq=False, repr=False)
class PresetFilter(betterproto.Message):
    """Фильтр по пресетам"""

    mrf_ids: List[int] = betterproto.int32_field(1)
    """По идентификаторам МРФ"""

    rf_ids: List[int] = betterproto.int32_field(2)
    """По идентификаторам РФ"""

    text: Optional[str] = betterproto.message_field(3, wraps=betterproto.TYPE_STRING)
    """
    Поиск по тексту. Если значение не передано то поиск по нему не
    производится. # Диапазон: 3..64. # Поиск производится по полям: # -
    Наименование; # - Описание
    """

    title: Optional[str] = betterproto.message_field(4, wraps=betterproto.TYPE_STRING)
    """
    Поиск по наименованию. Если значение не передано то поиск по нему не
    производится. # Диапазон: 3..64. # Поиск производится по полям: # -
    Наименование
    """

    status_types: List["PresetStatusType"] = betterproto.enum_field(5)
    """По статусам"""


@dataclass(eq=False, repr=False)
class PresetPaging(betterproto.Message):
    """Постраничный вывод"""

    order_by_type: "PresetPagingOrderByType" = betterproto.enum_field(1)
    """
    Тип значения сортировки. Если значение не передано, то будет взято значение
    по умолчанию. # По умолчанию: CHANGED_AT
    """

    direction_type: "PresetPagingDirectionType" = betterproto.enum_field(2)
    """Тип направления сортировки. # По умолчанию: DESC"""

    limit: int = betterproto.int32_field(3)
    """
    Количество записей на страницу. Если значение 0 (не передано), то будет
    взято значение по умолчанию. # Диапазон: 0..100. # По умолчанию: 20
    """

    offset: int = betterproto.int32_field(4)
    """Сдвиг. # Диапазон: 0..2147483647"""


@dataclass(eq=False, repr=False)
class ValidationError(betterproto.Message):
    """
    Ошибки валидации. Эти проверки выполняются до обращения в базу данных
    """

    path: str = betterproto.string_field(1)
    """Путь к полю в формате наименования прото"""

    message: str = betterproto.string_field(2)
    """Валидационное сообщение"""


@dataclass(eq=False, repr=False)
class GetSystemStatusRequest(betterproto.Message):
    """Запрос проверки доступности сервиса"""

    pass


@dataclass(eq=False, repr=False)
class GetSystemStatusResponse(betterproto.Message):
    """Ответ на запрос проверки доступности сервиса"""

    pass


@dataclass(eq=False, repr=False)
class PostEventPresetInstallRequest(betterproto.Message):
    """Запрос на установку пресета"""

    id: int = betterproto.int32_field(1)
    """Идентификатор пресета"""


@dataclass(eq=False, repr=False)
class PostEventPresetInstallResponse(betterproto.Message):
    """Ответ на запрос на установку пресета"""

    pass


@dataclass(eq=False, repr=False)
class PresetConfigurationTask(betterproto.Message):
    """
    Задача на конфигурирование устройства. Очередь key.preset.configuration
    """

    request_id: str = betterproto.string_field(1)
    """Идентификатор запроса"""

    preset: "Preset" = betterproto.message_field(2)
    """Пресет"""

    device_id: int = betterproto.int32_field(3)
    """Идентификатор устройства"""

    model: str = betterproto.string_field(4)
    """Модель"""

    host: str = betterproto.string_field(5)
    """Адрес устройства"""

    username: str = betterproto.string_field(6)
    """Имя пользователя устройства"""

    password: str = betterproto.string_field(7)
    """Пароль пользователья устройства"""

    ntp_timezone: str = betterproto.string_field(8)
    """Таймзона NTP"""


@dataclass(eq=False, repr=False)
class PresetConfigurationSuccessTask(betterproto.Message):
    """
    Задача успешной конфигурации устройства. Очередь
    key.preset.configuration_success
    """

    request_id: str = betterproto.string_field(1)
    """Идентификатор ответа"""

    device_id: int = betterproto.int32_field(2)
    """Идентификатор устройства"""

    preset_id: int = betterproto.int32_field(3)
    """Идентификатор пресета"""

    configured_at: datetime = betterproto.message_field(4)
    """Дата и время конфигурации"""


@dataclass(eq=False, repr=False)
class PresetConfigurationFailTask(betterproto.Message):
    """
    Задача ошибки при конфигурации устройства. Очередь
    key.preset.configuration_fail
    """

    request_id: str = betterproto.string_field(1)
    """Идентификатор ответа"""

    device_id: int = betterproto.int32_field(2)
    """Идентификатор устройства"""

    preset_id: int = betterproto.int32_field(3)
    """Идентификатор пресета"""

    error_message: str = betterproto.string_field(4)
    """Текст ошибки"""


@dataclass(eq=False, repr=False)
class PresetInstallTask(betterproto.Message):
    """Задача на установку пресета. Очередь key.preset.install"""

    request_id: str = betterproto.string_field(1)
    """Идентификатор запроса"""

    preset: "Preset" = betterproto.message_field(2)
    """Пресет"""


class PresetServiceStub(betterproto.ServiceStub):
    async def post_preset(
        self,
        post_preset_request: "PostPresetRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "PostPresetResponse":
        return await self._unary_unary(
            "/keyapis.preset.v1.PresetService/PostPreset",
            post_preset_request,
            PostPresetResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_preset(
        self,
        get_preset_request: "GetPresetRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetPresetResponse":
        return await self._unary_unary(
            "/keyapis.preset.v1.PresetService/GetPreset",
            get_preset_request,
            GetPresetResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_preset_default(
        self,
        get_preset_default_request: "GetPresetDefaultRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetPresetDefaultResponse":
        return await self._unary_unary(
            "/keyapis.preset.v1.PresetService/GetPresetDefault",
            get_preset_default_request,
            GetPresetDefaultResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_preset_list(
        self,
        get_preset_list_request: "GetPresetListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> AsyncIterator["GetPresetListResponse"]:
        async for response in self._unary_stream(
            "/keyapis.preset.v1.PresetService/GetPresetList",
            get_preset_list_request,
            GetPresetListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        ):
            yield response

    async def get_preset_count(
        self,
        get_preset_count_request: "GetPresetCountRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetPresetCountResponse":
        return await self._unary_unary(
            "/keyapis.preset.v1.PresetService/GetPresetCount",
            get_preset_count_request,
            GetPresetCountResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def delete_preset(
        self,
        delete_preset_request: "DeletePresetRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "DeletePresetResponse":
        return await self._unary_unary(
            "/keyapis.preset.v1.PresetService/DeletePreset",
            delete_preset_request,
            DeletePresetResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class SystemServiceStub(betterproto.ServiceStub):
    async def get_system_status(
        self,
        get_system_status_request: "GetSystemStatusRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetSystemStatusResponse":
        return await self._unary_unary(
            "/keyapis.preset.v1.SystemService/GetSystemStatus",
            get_system_status_request,
            GetSystemStatusResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class EventServiceStub(betterproto.ServiceStub):
    async def post_event_preset_install(
        self,
        post_event_preset_install_request: "PostEventPresetInstallRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "PostEventPresetInstallResponse":
        return await self._unary_unary(
            "/keyapis.preset.v1.EventService/PostEventPresetInstall",
            post_event_preset_install_request,
            PostEventPresetInstallResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class PresetServiceBase(ServiceBase):

    async def post_preset(
        self, post_preset_request: "PostPresetRequest"
    ) -> "PostPresetResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_preset(
        self, get_preset_request: "GetPresetRequest"
    ) -> "GetPresetResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_preset_default(
        self, get_preset_default_request: "GetPresetDefaultRequest"
    ) -> "GetPresetDefaultResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_preset_list(
        self, get_preset_list_request: "GetPresetListRequest"
    ) -> AsyncIterator["GetPresetListResponse"]:
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_preset_count(
        self, get_preset_count_request: "GetPresetCountRequest"
    ) -> "GetPresetCountResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def delete_preset(
        self, delete_preset_request: "DeletePresetRequest"
    ) -> "DeletePresetResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_post_preset(
        self, stream: "grpclib.server.Stream[PostPresetRequest, PostPresetResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_preset(request)
        await stream.send_message(response)

    async def __rpc_get_preset(
        self, stream: "grpclib.server.Stream[GetPresetRequest, GetPresetResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_preset(request)
        await stream.send_message(response)

    async def __rpc_get_preset_default(
        self,
        stream: "grpclib.server.Stream[GetPresetDefaultRequest, GetPresetDefaultResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_preset_default(request)
        await stream.send_message(response)

    async def __rpc_get_preset_list(
        self,
        stream: "grpclib.server.Stream[GetPresetListRequest, GetPresetListResponse]",
    ) -> None:
        request = await stream.recv_message()
        await self._call_rpc_handler_server_stream(
            self.get_preset_list,
            stream,
            request,
        )

    async def __rpc_get_preset_count(
        self,
        stream: "grpclib.server.Stream[GetPresetCountRequest, GetPresetCountResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_preset_count(request)
        await stream.send_message(response)

    async def __rpc_delete_preset(
        self, stream: "grpclib.server.Stream[DeletePresetRequest, DeletePresetResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.delete_preset(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/keyapis.preset.v1.PresetService/PostPreset": grpclib.const.Handler(
                self.__rpc_post_preset,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostPresetRequest,
                PostPresetResponse,
            ),
            "/keyapis.preset.v1.PresetService/GetPreset": grpclib.const.Handler(
                self.__rpc_get_preset,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetPresetRequest,
                GetPresetResponse,
            ),
            "/keyapis.preset.v1.PresetService/GetPresetDefault": grpclib.const.Handler(
                self.__rpc_get_preset_default,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetPresetDefaultRequest,
                GetPresetDefaultResponse,
            ),
            "/keyapis.preset.v1.PresetService/GetPresetList": grpclib.const.Handler(
                self.__rpc_get_preset_list,
                grpclib.const.Cardinality.UNARY_STREAM,
                GetPresetListRequest,
                GetPresetListResponse,
            ),
            "/keyapis.preset.v1.PresetService/GetPresetCount": grpclib.const.Handler(
                self.__rpc_get_preset_count,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetPresetCountRequest,
                GetPresetCountResponse,
            ),
            "/keyapis.preset.v1.PresetService/DeletePreset": grpclib.const.Handler(
                self.__rpc_delete_preset,
                grpclib.const.Cardinality.UNARY_UNARY,
                DeletePresetRequest,
                DeletePresetResponse,
            ),
        }


class SystemServiceBase(ServiceBase):

    async def get_system_status(
        self, get_system_status_request: "GetSystemStatusRequest"
    ) -> "GetSystemStatusResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_get_system_status(
        self,
        stream: "grpclib.server.Stream[GetSystemStatusRequest, GetSystemStatusResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_system_status(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/keyapis.preset.v1.SystemService/GetSystemStatus": grpclib.const.Handler(
                self.__rpc_get_system_status,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetSystemStatusRequest,
                GetSystemStatusResponse,
            ),
        }


class EventServiceBase(ServiceBase):

    async def post_event_preset_install(
        self, post_event_preset_install_request: "PostEventPresetInstallRequest"
    ) -> "PostEventPresetInstallResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_post_event_preset_install(
        self,
        stream: "grpclib.server.Stream[PostEventPresetInstallRequest, PostEventPresetInstallResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_event_preset_install(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/keyapis.preset.v1.EventService/PostEventPresetInstall": grpclib.const.Handler(
                self.__rpc_post_event_preset_install,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostEventPresetInstallRequest,
                PostEventPresetInstallResponse,
            ),
        }
