# Generated by the protocol buffer compiler.  DO NOT EDIT!
# sources: keyapis/vc/v1/keyapis_vc_camera_access_v1.proto, keyapis/vc/v1/keyapis_vc_camera_group_v1.proto, keyapis/vc/v1/keyapis_vc_camera_location_data_v1.proto, keyapis/vc/v1/keyapis_vc_camera_v1.proto, keyapis/vc/v1/keyapis_vc_camera_video_data_v1.proto, keyapis/vc/v1/keyapis_vc_company_v1.proto, keyapis/vc/v1/keyapis_vc_events_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 CameraRoomPagingDirectionType(betterproto.Enum):
    """Справочник типов направлений сортировки. # Тип: byte"""

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

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

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


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

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

    CAMERA_UID = 1
    """По Идентификатору камеры"""

    ORPON_ROOM_NUMBER = 2
    """По ОРПОН и номеру квартиры"""


class CameraType(betterproto.Enum):
    """Справочник типов камер"""

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

    DVR = 1
    """Регистратор"""

    VMS = 2
    """Система управления видео"""

    ROSE = 3
    """RTSP-камера"""

    VIOLET = 4
    """IP-камера"""


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

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

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

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


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

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

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


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

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

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

    NAME = 2
    """По имени"""

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


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

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

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

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


class CameraAccessAccessorType(betterproto.Enum):
    """Тип субъекта доступа"""

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

    USER = 1
    """Пользователь"""

    GROUP = 2
    """ГРуппа"""


class CameraLocationDataStatusType(betterproto.Enum):
    """Справочник статусов устройства"""

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

    OFFLINE = 1
    """Не в сети"""

    ONLINE = 2
    """В сети"""


class CameraLocationDataDeviceType(betterproto.Enum):
    """Тип устройства"""

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

    INTERCOM = 1
    """Домофон"""

    VIDEOCAMERA = 2
    """Видеокамера"""

    BARRIER = 3
    """Шлагбаум"""

    GATE = 4
    """Калитка"""

    ACCESS_CONTROL_PANEL = 5
    """СКУД"""

    OUTDOOR_CAMERA = 6
    """Наружняя видеокамера"""


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

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

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

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


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

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

    CREATED_AT = 1
    """По дате создания"""


@dataclass(eq=False, repr=False)
class CameraRoom(betterproto.Message):
    """Связь камеры и квартиры"""

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

    orpon: int = betterproto.int64_field(2)
    """ОРПОН дома"""

    room_number: str = betterproto.string_field(3)
    """Номер квартиры. # Диапазон: 1..4"""


@dataclass(eq=False, repr=False)
class CameraRoomFilter(betterproto.Message):
    """
    Фильтр связок камеры и квартиры. При передаче массива в параметр фильтра
    элементы массива работают в выборке через ИЛИ. При передаче нескольких
    разных параметров фильтра они работают в выборке через И
    """

    camera_uids: List[str] = betterproto.string_field(1)
    """По Идентификаторам камер. # Диапазон: 0..100"""

    orpons: List[int] = betterproto.int64_field(2)
    """По ОРПОНам. # Диапазон: 0..100"""

    room_numbers: List[str] = betterproto.string_field(3)
    """По квартирам. # Диапазон: 0..100"""


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

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

    direction_type: "CameraRoomPagingDirectionType" = 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 Camera(betterproto.Message):
    """Камера"""

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

    uid: str = betterproto.string_field(2)
    """uid камеры"""

    name: str = betterproto.string_field(3)
    """Название камеры"""

    is_online: bool = betterproto.bool_field(4)
    """Признак: онлайн камера или нет"""

    is_active_user_camera: bool = betterproto.bool_field(5)
    """Признак: Есть ли у камеры активный пользователь"""

    status_changed_at: datetime = betterproto.message_field(6)
    """Дата и время изменения статуса камеры"""

    mac: str = betterproto.string_field(7)
    """MAC-адрес камеры"""

    ip: str = betterproto.string_field(8)
    """IP камеры"""

    remote_ip: str = betterproto.string_field(9)
    """Внешний IP камеры"""

    tariff_started_at: datetime = betterproto.message_field(10)
    """Дата начала действия текущего тарифа"""

    tariff_ended_at: datetime = betterproto.message_field(11)
    """Дата окончания действия текущего тарифа"""

    tariff_title: str = betterproto.string_field(12)
    """Наименование тарифа"""

    type: "CameraType" = betterproto.enum_field(13)
    """Тип камеры"""

    camera_category_id: int = betterproto.int32_field(14)
    """
    Идентификатор категории. Камера - 1, домофон - 2, скуд - 3, шлагбаум - 4
    """

    rtsp_url: str = betterproto.string_field(15)
    """РТСП-ссылка"""

    serial_number: str = betterproto.string_field(16)
    """Серийный номер"""

    company_id: int = betterproto.int32_field(17)
    """Идентификатор компании"""


@dataclass(eq=False, repr=False)
class CameraValidationError(betterproto.Message):
    """Ошибки валидации"""

    rtsp_url_required: "CameraValidationErrorRtspUrlRequired" = (
        betterproto.message_field(1, group="reason")
    )
    """Поле rtsp_url должно быть заполнено"""

    one_field_mac_or_serial_number_required: (
        "CameraValidationErrorOneFieldMacOrSerialNumberRequired"
    ) = betterproto.message_field(2, group="reason")
    """Только одно поле обязательно к заполнению mac или serial_number"""


@dataclass(eq=False, repr=False)
class CameraValidationErrorRtspUrlRequired(betterproto.Message):
    """Поле rtsp_url должно быть заполнено. Только для камер с типом ROSE"""

    pass


@dataclass(eq=False, repr=False)
class CameraValidationErrorOneFieldMacOrSerialNumberRequired(betterproto.Message):
    """
    Только одно поле обязательно к заполнению mac или serial_number. Для камер
    с типом VIOLET и DVR
    """

    pass


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

    is_active: Optional[bool] = betterproto.message_field(
        1, wraps=betterproto.TYPE_BOOL
    )
    """Признак активности камеры"""

    is_channel_alive: Optional[bool] = betterproto.message_field(
        2, wraps=betterproto.TYPE_BOOL
    )
    """Признак активности канала"""

    is_online: Optional[bool] = betterproto.message_field(
        3, wraps=betterproto.TYPE_BOOL
    )
    """Статус камеры"""

    camera_type: "CameraType" = betterproto.enum_field(4)
    """Тип камеры"""


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

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

    direction_type: "CameraPagingDirectionType" = 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 CameraScope(betterproto.Message):
    """Ограничение выборки камер"""

    vc_company_id: int = betterproto.int32_field(1)
    """Внешний идентификатор компании"""


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

    scope: "CameraScope" = betterproto.message_field(1)
    """Ограничение выборки"""

    filter: "CameraFilter" = betterproto.message_field(2)
    """Фильтр"""

    paging: "CameraPaging" = betterproto.message_field(3, group="pagination")
    """Постраничный вывод"""


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

    data: "GetCameraListResponseData" = betterproto.message_field(1, group="type")
    """Список"""

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


@dataclass(eq=False, repr=False)
class GetCameraListResponseError(betterproto.Message):
    """Ошибка запроса"""

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


@dataclass(eq=False, repr=False)
class GetCameraListResponseData(betterproto.Message):
    """Список"""

    items: List["Camera"] = betterproto.message_field(1)
    """Список Camera"""

    total: int = betterproto.int32_field(2)
    """Всего количество"""


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

    scope: "CameraScope" = betterproto.message_field(1)
    """Ограничение выборки"""

    uid: str = betterproto.string_field(2)
    """uid камеры"""


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

    data: "Camera" = betterproto.message_field(1, group="type")
    """Камера"""

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


@dataclass(eq=False, repr=False)
class GetCameraResponseError(betterproto.Message):
    """Ошибка запроса"""

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


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

    external_id: str = betterproto.string_field(1)
    """Идентификатор камеры в vcfront. # Тип: Guid"""


@dataclass(eq=False, repr=False)
class GetCameraRtspUrlExternalIdResponse(betterproto.Message):
    """
    Ответ на запрос получения RTSP-ссылки по идентификатору камеры в vcfront
    """

    data: "GetCameraRtspUrlExternalIdResponseCameraRtspUrl" = betterproto.message_field(
        1, group="type"
    )
    """RTSP-ссылка"""

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


@dataclass(eq=False, repr=False)
class GetCameraRtspUrlExternalIdResponseCameraRtspUrl(betterproto.Message):
    """RTSP-ссылка"""

    rtsp_url: str = betterproto.string_field(1)
    """RTSP-ссылка"""


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

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


@dataclass(eq=False, repr=False)
class PutCameraRoomAttachRequest(betterproto.Message):
    """Запрос привязки камеры и квартиры"""

    data: "CameraRoom" = betterproto.message_field(1)
    """Связь Camera и Room"""


@dataclass(eq=False, repr=False)
class PutCameraRoomAttachResponse(betterproto.Message):
    """Ответ привязки камеры и квартиры"""

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


@dataclass(eq=False, repr=False)
class PutCameraRoomAttachResponseError(betterproto.Message):
    """Ошибка запроса"""

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


@dataclass(eq=False, repr=False)
class PutCameraRoomAttachListRequest(betterproto.Message):
    """Запрос пакетной привязки камер и квартир"""

    data: List["CameraRoom"] = betterproto.message_field(1)
    """Массив связей Camera и Room"""


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

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


@dataclass(eq=False, repr=False)
class PutCameraRoomAttachListResponseError(betterproto.Message):
    """Ошибка запроса"""

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


@dataclass(eq=False, repr=False)
class PutCameraRoomDetachRequest(betterproto.Message):
    """Запрос отвязки камеры и квартиры"""

    data: "CameraRoom" = betterproto.message_field(1)
    """Связь Camera и Room"""


@dataclass(eq=False, repr=False)
class PutCameraRoomDetachResponse(betterproto.Message):
    """Ответ отвязки камеры и квартиры"""

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


@dataclass(eq=False, repr=False)
class PutCameraRoomDetachResponseError(betterproto.Message):
    """Ошибка запроса"""

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


@dataclass(eq=False, repr=False)
class PutCameraRoomDetachListRequest(betterproto.Message):
    """Запрос пакетной отвязки камер и квартир"""

    data: List["CameraRoom"] = betterproto.message_field(1)
    """Массив связей Camera и Room"""


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

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


@dataclass(eq=False, repr=False)
class PutCameraRoomDetachListResponseError(betterproto.Message):
    """Ошибка запроса"""

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


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

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


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

    data: int = betterproto.int32_field(1, group="type")
    """Всего количество"""

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


@dataclass(eq=False, repr=False)
class GetCameraRoomCountResponseError(betterproto.Message):
    """Ошибка запроса"""

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


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

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

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


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

    data: "CameraRoom" = betterproto.message_field(1, group="type")
    """Связь камеры и квартиры"""

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


@dataclass(eq=False, repr=False)
class GetCameraRoomListResponseError(betterproto.Message):
    """Ошибка запроса"""

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


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

    uid: str = betterproto.string_field(1)
    """Идентификатор камеры в vcfront. # Тип: Guid"""

    is_delete_permanently: bool = betterproto.bool_field(2)
    """Флаг полного (безвозвратного) удаления камеры"""


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

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


@dataclass(eq=False, repr=False)
class DeleteCameraResponseError(betterproto.Message):
    """Ошибка запроса"""

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


@dataclass(eq=False, repr=False)
class PostCameraRequest(betterproto.Message):
    """Запрос создания камеры"""

    data: "Camera" = betterproto.message_field(1)
    """Камера"""


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

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


@dataclass(eq=False, repr=False)
class PostCameraResponseError(betterproto.Message):
    """Ошибка запроса"""

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

    camera_validation: "CameraValidationError" = betterproto.message_field(
        2, group="reason"
    )
    """Ошибка валидации"""

    vc: "PostCameraResponseErrorVcError" = betterproto.message_field(3, group="reason")
    """Ошибка в сервисе ВН"""


@dataclass(eq=False, repr=False)
class PostCameraResponseErrorVcError(betterproto.Message):
    """Ошибка в сервисе ВН"""

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


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

    uid: str = betterproto.string_field(1)
    """Идентификатор камеры в vcfront. # Тип: Guid"""

    offset: Optional[int] = betterproto.message_field(2, wraps=betterproto.TYPE_INT32)
    """Смещение от UTC в минутах"""


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

    data: "GetCameraCalendarResponseCaledar" = betterproto.message_field(
        1, group="type"
    )
    """Дни с записями"""

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


@dataclass(eq=False, repr=False)
class GetCameraCalendarResponseCaledar(betterproto.Message):
    """Дни с записями"""

    items: List[str] = betterproto.string_field(1)
    """День с записью"""


@dataclass(eq=False, repr=False)
class GetCameraCalendarResponseError(betterproto.Message):
    """Ошибка запроса"""

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

    vc: "GetCameraCalendarResponseErrorVcError" = betterproto.message_field(
        2, group="reason"
    )
    """Ошибка в сервисе ВН"""


@dataclass(eq=False, repr=False)
class GetCameraCalendarResponseErrorVcError(betterproto.Message):
    """Ошибка в сервисе ВН"""

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


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

    uid: str = betterproto.string_field(1)
    """Идентификатор камеры в vcfront. # Тип: Guid"""

    offset: Optional[int] = betterproto.message_field(2, wraps=betterproto.TYPE_INT32)
    """Смещение от UTC в минутах"""


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

    data: "GetCameraIntervalsResponseInterval" = betterproto.message_field(
        1, group="type"
    )
    """Интервалы"""

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


@dataclass(eq=False, repr=False)
class GetCameraIntervalsResponseInterval(betterproto.Message):
    """Интервалы"""

    items: List["GetCameraIntervalsResponseIntervalItem"] = betterproto.message_field(1)
    """Список интервалов"""


@dataclass(eq=False, repr=False)
class GetCameraIntervalsResponseIntervalItem(betterproto.Message):
    """Интервал"""

    since_at: datetime = betterproto.message_field(1)
    """Значение интервала с. # Тип: DateTime"""

    till_at: datetime = betterproto.message_field(2)
    """Значение интервала до. # Тип: DateTime"""


@dataclass(eq=False, repr=False)
class GetCameraIntervalsResponseError(betterproto.Message):
    """Ошибка запроса"""

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

    vc: "GetCameraIntervalsResponseErrorVcError" = betterproto.message_field(
        2, group="reason"
    )
    """Ошибка в сервисе ВН"""


@dataclass(eq=False, repr=False)
class GetCameraIntervalsResponseErrorVcError(betterproto.Message):
    """Ошибка в сервисе ВН"""

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


@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 GetCameraCollectionCountRequest(betterproto.Message):
    """Запрос получения количества коллекций камер"""

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


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

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

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


@dataclass(eq=False, repr=False)
class GetCameraCollectionCountResponseError(betterproto.Message):
    """Ошибка запроса"""

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


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

    id: str = betterproto.string_field(1)
    """Идентификатор коллекции камер. Тип: Guid"""


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

    data: "CameraCollection" = betterproto.message_field(1, group="type")
    """Коллекция камер"""

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


@dataclass(eq=False, repr=False)
class GetCameraCollectionResponseError(betterproto.Message):
    """Ошибка запроса"""

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


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

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

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


@dataclass(eq=False, repr=False)
class CameraCollectionFilter(betterproto.Message):
    """Фильтр коллекций камер"""

    text: str = betterproto.string_field(1)
    """
    По тексту. Если значение не передано то поиск по нему не производится. #
    Диапазон: 3..64. # Поиск производится по полям: # - Наименование. # -
    Описание. # - Теги коллекции
    """

    tags: List[str] = betterproto.string_field(2)
    """По тегам. Диапазон: 0..10"""

    company_ids: List[int] = betterproto.int64_field(3)
    """По компаниям. Диапазон: 0..10"""

    is_deleted: Optional[bool] = betterproto.message_field(
        4, wraps=betterproto.TYPE_BOOL
    )
    """
    Показывать удаленные. Если поле не передано, по умолчанию false, фильтр
    исключает удаленные
    """


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

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

    direction_type: "CameraCollectionPagingDirectionType" = 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 GetCameraCollectionListResponse(betterproto.Message):
    """Ответ на запрос получения списка коллекций камер"""

    data: "CameraCollection" = betterproto.message_field(1, group="type")
    """Коллекция камер"""

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


@dataclass(eq=False, repr=False)
class GetCameraCollectionListResponseError(betterproto.Message):
    """Ошибка запроса"""

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


@dataclass(eq=False, repr=False)
class SaveCameraCollectionRequest(betterproto.Message):
    """Запрос на создание коллекции камер"""

    data: "CameraCollection" = betterproto.message_field(1)
    """Коллекция камер"""


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

    data: "CameraCollection" = betterproto.message_field(1, group="type")
    """Коллекция камер"""

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


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

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

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


@dataclass(eq=False, repr=False)
class CameraCollection(betterproto.Message):
    """Коллекция камер"""

    id: str = betterproto.string_field(1)
    """Идентификатор коллекции камер. Тип: Guid"""

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

    changed_at: datetime = betterproto.message_field(3)
    """
    Дата изменения коллекции камер. Поле используется при редактировании и
    создании для контроля актуальности изменяемой версии
    """

    company_id: int = betterproto.int64_field(4)
    """Идентификатор компании"""

    deleted_at: datetime = betterproto.message_field(5)
    """
    Дата удаления коллекции камер. Поле изменяется через методы Delete и
    Restore
    """

    description: str = betterproto.string_field(6)
    """Описание. Диапазон: 0..256"""

    tags: List[str] = betterproto.string_field(7)
    """Теги коллекции. Диапазон: 0..10"""

    external_camera_ids: List[str] = betterproto.string_field(8)
    """Привязанные к коллекции камеры"""


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

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

    wrong_company_id: "CameraCollectionSavingErrorWrongCompanyId" = (
        betterproto.message_field(2, group="reason")
    )
    """Попытка сохранить коллекцию камер с company_id не своей компании"""


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

    pass


@dataclass(eq=False, repr=False)
class CameraCollectionSavingErrorWrongCompanyId(betterproto.Message):
    """
    Попытка сохранить коллекцию камер с company_id не своей компании. Для ролей
    owner, employee сохранение разрешено только с company_id своей компании
    """

    pass


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

    id: str = betterproto.string_field(1)
    """Идентификатор коллекции камер. Тип: Guid"""


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

    id: str = betterproto.string_field(1)
    """Идентификатор коллекции камер. Тип: Guid"""


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

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


@dataclass(eq=False, repr=False)
class DeleteCameraCollectionResponseError(betterproto.Message):
    """Ошибка запроса"""

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


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

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


@dataclass(eq=False, repr=False)
class PostCameraCollectionRestoreResponseError(betterproto.Message):
    """Ошибка запроса"""

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


@dataclass(eq=False, repr=False)
class CameraAccess(betterproto.Message):
    """Доступ к камере. # Описание модели"""

    external_id: str = betterproto.string_field(1)
    """Идентификатор камеры в vcfront. # Тип: Guid"""

    accessor_type: "CameraAccessAccessorType" = betterproto.enum_field(2)
    """Тип субъекта доступа"""

    accessor_id: str = betterproto.string_field(3)
    """Идентификатор субъекта доступа. # Диапазон: 1..36"""

    vc_company_id: int = betterproto.int32_field(4)
    """Идентификатор компании в vcfront. # Диапазон: 1..2147483647"""


@dataclass(eq=False, repr=False)
class CreateCameraAccessTask(betterproto.Message):
    """
    Задача на создание доступа к камере. Очередь key.vc.create_camera_access
    """

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

    external_ids: List[str] = betterproto.string_field(2)
    """Идентификаторы камер в vcfront. # Тип: Guid"""

    camera_access_accessor_type: "CameraAccessAccessorType" = betterproto.enum_field(3)
    """Тип субъекта доступа"""

    accessor_id: str = betterproto.string_field(4)
    """Идентификатор субъекта доступа. # Диапазон: 1..36"""

    vc_company_id: int = betterproto.int32_field(5)
    """Идентификатор компании в vcfront. # Диапазон: 1..2147483647"""


@dataclass(eq=False, repr=False)
class DeleteCameraAccessTask(betterproto.Message):
    """
    Задача на удаление доступа к камере. Очередь key.vc.delete_camera_access
    """

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

    external_ids: List[str] = betterproto.string_field(2)
    """Идентификаторы камер в vcfront. # Тип: Guid"""

    camera_access_accessor_type: "CameraAccessAccessorType" = betterproto.enum_field(3)
    """Тип субъекта доступа"""

    accessor_id: str = betterproto.string_field(4)
    """Идентификатор субъекта доступа. # Диапазон: 1..36"""

    vc_company_id: int = betterproto.int32_field(5)
    """Идентификатор компании в vcfront. # Диапазон: 1..2147483647"""


@dataclass(eq=False, repr=False)
class DetachCameraFromDeviceTask(betterproto.Message):
    """
    Задача на отвязку камеры от устройств. Отправляется при удалении камеры.
    Очередь key.vc.detach_camera_from_devices
    """

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

    external_id: str = betterproto.string_field(2)
    """Идентификатор камер в vcfront. # Тип: Guid"""


@dataclass(eq=False, repr=False)
class DetachCameraFromAccessPointTask(betterproto.Message):
    """
    Задача на отвязку камеры от точек доступа. Отправляется при удалении
    камеры. Очередь key.vc.detach_camera_from_access_points
    """

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

    external_id: str = betterproto.string_field(2)
    """Идентификатор камер в vcfront. # Тип: Guid"""


@dataclass(eq=False, repr=False)
class GetCameraLocationDataRequest(betterproto.Message):
    """Запрос на получение данных o местонахождении камеры"""

    uid: str = betterproto.string_field(1)
    """uid видеопотока камеры"""


@dataclass(eq=False, repr=False)
class GetCameraLocationDataResponse(betterproto.Message):
    """Ответ на запрос на получение данных o местонахождении камеры"""

    data: "CameraLocationData" = betterproto.message_field(1, group="type")
    """Данные o местонахождении камеры"""

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


@dataclass(eq=False, repr=False)
class GetCameraLocationDataResponseError(betterproto.Message):
    """Ошибка запроса"""

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


@dataclass(eq=False, repr=False)
class CameraLocationData(betterproto.Message):
    """Данные o местонахождении камеры"""

    uid: str = betterproto.string_field(1)
    """Идентификатор видеопотока в системе Видеокомфорт. Тип: Guid"""

    device_type: "CameraLocationDataDeviceType" = betterproto.enum_field(2)
    """Тип устройства. # Тип: byte"""

    model: str = betterproto.string_field(3)
    """Модель устройства"""

    serial_number: str = betterproto.string_field(4)
    """Серийный номер устройства"""

    hw_version: str = betterproto.string_field(5)
    """Версия аппаратного обеспечения"""

    sw_version: str = betterproto.string_field(6)
    """Версия программного обеспечения"""

    mac: str = betterproto.string_field(7)
    """
    MAC-адрес. # Диапазон: 17..17. # Паттерн:
    /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/
    """

    title: str = betterproto.string_field(8)
    """Наименование устройства. # Диапазон: 3..256"""

    host: str = betterproto.string_field(9)
    """Сетевой адрес. # Диапазон: 0..250"""

    status_type: "CameraLocationDataStatusType" = betterproto.enum_field(10)
    """Статус устройства"""

    entrance_numbers: List[int] = betterproto.int32_field(11)
    """Номер подъезда. # Диапазон: 1..100"""

    flatgramm_id: int = betterproto.int32_field(12)
    """Идентификатор квартирограммы. # Диапазон: 1..2147483647"""

    company: "CameraLocationDataCompany" = betterproto.message_field(13)
    """Компания владелец устройства"""

    buildings: List["CameraLocationDataBuilding"] = betterproto.message_field(14)
    """Массив домов камеры"""


@dataclass(eq=False, repr=False)
class CameraLocationDataBuilding(betterproto.Message):
    """Дом"""

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

    rf_id: int = betterproto.int32_field(2)
    """Идентификатор РФ"""

    mrf_id: int = betterproto.int32_field(3)
    """Идентификатор МРФ"""

    orpon: int = betterproto.int64_field(4)
    """ОРПОН"""

    city: str = betterproto.string_field(5)
    """Город"""

    street: str = betterproto.string_field(6)
    """Улица"""

    number: str = betterproto.string_field(7)
    """Номер дома"""

    part: str = betterproto.string_field(8)
    """Корпус"""

    company_id: int = betterproto.int32_field(9)
    """Идентификатор компании"""

    prefix: str = betterproto.string_field(10)
    """Префикс"""

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

    deleted_at: datetime = betterproto.message_field(12)
    """Дата удаления. # Тип: DateTime"""

    flatgramm_id: int = betterproto.int32_field(13)
    """Идентификатор квартирограммы"""

    city_orpon: int = betterproto.int64_field(14)
    """ОРПОН города, в котором находится дом"""

    fias: str = betterproto.string_field(15)
    """
    Идентификатор в федеральной информационной адресной системе. Тип: Guid
    """

    district: str = betterproto.string_field(16)
    """Наименования района. # Диапазон: 0..200"""

    unom: str = betterproto.string_field(17)
    """Уникальный номер адреса. # Диапазон: 0..9999999999"""

    region_orpon: int = betterproto.int64_field(18)
    """ОРПОН региона"""


@dataclass(eq=False, repr=False)
class CameraLocationDataCompany(betterproto.Message):
    """Компания"""

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

    vc_company_id: int = betterproto.int64_field(2)
    """Идентификатор компании в системе Видеокомфорт"""

    name: str = betterproto.string_field(3)
    """Наименование компании"""

    inn: str = betterproto.string_field(4)
    """ИНН"""

    kpp: str = betterproto.string_field(5)
    """КПП"""

    ogrn: str = betterproto.string_field(6)
    """ОГРН"""


@dataclass(eq=False, repr=False)
class CameraVideoData(betterproto.Message):
    """Камера"""

    uid: str = betterproto.string_field(1)
    """Идентификатор камеры в системе Видеокомфорт. Тип: Guid"""

    category: "CameraVideoDataCategory" = betterproto.message_field(2)
    """Категория камеры"""

    title: str = betterproto.string_field(3)
    """Наименование камеры"""

    serial_number: str = betterproto.string_field(4)
    """Серийный номер камеры"""

    ip: str = betterproto.string_field(5)
    """IP камеры"""

    streamer_url: str = betterproto.string_field(6)
    """Адрес видео-потока (https соединение)"""

    mac: str = betterproto.string_field(7)
    """MAC-адрес камеры"""

    model: str = betterproto.string_field(8)
    """Модель камеры"""

    vendor: str = betterproto.string_field(9)
    """Производитель камеры"""

    status: "CameraVideoDataStatus" = betterproto.message_field(10)
    """Статус камеры"""

    screenshot_url_template: str = betterproto.string_field(11)
    """URL скриншотов разных размеров в JPG-формате"""

    screenshot_precise_url_template: str = betterproto.string_field(12)
    """Шаблон для “точных” скриншотов. Выдаёт скриншоты всех размеров"""

    user_token: str = betterproto.string_field(13)
    """U-Токен, кука, которая выдается Умному Дому"""

    streamer_token: str = betterproto.string_field(14)
    """Токен для воспроизведения видео с камеры"""

    screenshot_token: str = betterproto.string_field(15)
    """Токен для получения контента с cdn (например, файлов изображений)"""

    archive_length: int = betterproto.int32_field(16)
    """Глубина хранения видео в минутах"""

    location: "CameraVideoDataLocation" = betterproto.message_field(17)
    """Координаты месторасположения"""

    created_at: datetime = betterproto.message_field(18)
    """Дата создания"""

    updated_at: datetime = betterproto.message_field(19)
    """Дата обновления"""

    utc_offset: int = betterproto.int32_field(20)
    """Смещение таймзоны в минутах. # Диапазон: -720..840"""


@dataclass(eq=False, repr=False)
class CameraVideoDataCategory(betterproto.Message):
    """Категория камеры"""

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

    type: str = betterproto.string_field(2)
    """Тип группы"""

    title: str = betterproto.string_field(3)
    """Имя группы"""


@dataclass(eq=False, repr=False)
class CameraVideoDataLocation(betterproto.Message):
    """Координаты месторасположения"""

    lat: float = betterproto.double_field(1)
    """Широта"""

    lng: float = betterproto.double_field(2)
    """Долгота"""


@dataclass(eq=False, repr=False)
class CameraVideoDataStatus(betterproto.Message):
    """Статус камеры"""

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

    type: str = betterproto.string_field(2)
    """online/offline"""

    title: str = betterproto.string_field(3)
    """Доступна/Не доступна"""


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

    uids: List[str] = betterproto.string_field(1)
    """Идентификатор камеры в системе Видеокомфорт. Тип: Guid"""

    title: List[str] = betterproto.string_field(2)
    """Наименование камеры"""

    mac: List[str] = betterproto.string_field(3)
    """MAC-адрес камеры"""

    ip: List[str] = betterproto.string_field(4)
    """IP камеры"""

    serial_number: List[str] = betterproto.string_field(5)
    """Серийный номер камеры"""

    category: List[str] = betterproto.string_field(6)
    """Категория камеры"""


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

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

    direction_type: "CameraVideoDataPagingDirectionType" = 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 CameraVideoDataScope(betterproto.Message):
    """Ограничение выборки камер"""

    company_id: int = betterproto.int64_field(1, group="scope")
    """Идентификатор компании"""

    user_id: int = betterproto.int32_field(2, group="scope")
    """Идентификатор пользователя"""


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

    scope: "CameraVideoDataScope" = betterproto.message_field(1)
    """Ограничение выборки"""

    filter: "CameraVideoDataFilter" = betterproto.message_field(2)
    """Фильтр"""


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

    data: int = betterproto.int32_field(1, group="type")
    """Всего количество"""

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


@dataclass(eq=False, repr=False)
class GetCameraVideoDataCountResponseError(betterproto.Message):
    """Ошибка запроса"""

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


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

    scope: "CameraVideoDataScope" = betterproto.message_field(1)
    """Ограничение выборки"""

    filter: "CameraVideoDataFilter" = betterproto.message_field(2)
    """Фильтр"""

    paging: "CameraVideoDataPaging" = betterproto.message_field(3, group="pagination")
    """Постраничный вывод"""


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

    data: List["CameraVideoData"] = betterproto.message_field(1)
    """Камера"""

    error: "GetCameraVideoDataListResponseError" = betterproto.message_field(2)
    """Ошибка"""


@dataclass(eq=False, repr=False)
class GetCameraVideoDataListResponseError(betterproto.Message):
    """Ошибка запроса"""

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


@dataclass(eq=False, repr=False)
class PostCompanyImpersonationRequest(betterproto.Message):
    """Запрос генерации имперсонационной ссылки для компании"""

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


@dataclass(eq=False, repr=False)
class PostCompanyImpersonationResponse(betterproto.Message):
    """Ответ на запрос генерации имперсонационной ссылки для компании"""

    data: "PostCompanyImpersonationResponseCompanyImpersonation" = (
        betterproto.message_field(1, group="type")
    )
    """Имперсонационная ссылка"""

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


@dataclass(eq=False, repr=False)
class PostCompanyImpersonationResponseError(betterproto.Message):
    """Ошибка генерации имперсонационной ссылки для компании"""

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

    owner_not_found: "PostCompanyImpersonationResponseErrorOwnerNotFound" = (
        betterproto.message_field(2, group="reason")
    )
    """Владелец компании не найден"""

    user_service_error: "PostCompanyImpersonationResponseErrorUserServiceError" = (
        betterproto.message_field(3, group="reason")
    )
    """Ошибка взаимодействия с сервисом User"""

    vcfront_service_error: (
        "PostCompanyImpersonationResponseErrorVcfrontServiceError"
    ) = betterproto.message_field(4, group="reason")
    """Ошибка взаимодействия с сервисом vcfront"""


@dataclass(eq=False, repr=False)
class PostCompanyImpersonationResponseErrorOwnerNotFound(betterproto.Message):
    """Владелец компании не найден"""

    pass


@dataclass(eq=False, repr=False)
class PostCompanyImpersonationResponseErrorUserServiceError(betterproto.Message):
    """Ошибка взаимодействия с сервисом User"""

    pass


@dataclass(eq=False, repr=False)
class PostCompanyImpersonationResponseErrorVcfrontServiceError(betterproto.Message):
    """Ошибка взаимодействия с сервисом vcfront"""

    pass


@dataclass(eq=False, repr=False)
class PostCompanyImpersonationResponseCompanyImpersonation(betterproto.Message):
    """Имперсонационная ссылка"""

    url: str = betterproto.string_field(1)
    """Одноразовая ссылка для имперсонации"""


class CameraServiceStub(betterproto.ServiceStub):
    async def get_camera_room_count(
        self,
        get_camera_room_count_request: "GetCameraRoomCountRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetCameraRoomCountResponse":
        return await self._unary_unary(
            "/keyapis.vc.v1.CameraService/GetCameraRoomCount",
            get_camera_room_count_request,
            GetCameraRoomCountResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_camera_room_list(
        self,
        get_camera_room_list_request: "GetCameraRoomListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> AsyncIterator["GetCameraRoomListResponse"]:
        async for response in self._unary_stream(
            "/keyapis.vc.v1.CameraService/GetCameraRoomList",
            get_camera_room_list_request,
            GetCameraRoomListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        ):
            yield response

    async def get_camera(
        self,
        get_camera_request: "GetCameraRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetCameraResponse":
        return await self._unary_unary(
            "/keyapis.vc.v1.CameraService/GetCamera",
            get_camera_request,
            GetCameraResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_camera_list(
        self,
        get_camera_list_request: "GetCameraListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetCameraListResponse":
        return await self._unary_unary(
            "/keyapis.vc.v1.CameraService/GetCameraList",
            get_camera_list_request,
            GetCameraListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_camera_rtsp_url_external_id(
        self,
        get_camera_rtsp_url_external_id_request: "GetCameraRtspUrlExternalIdRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetCameraRtspUrlExternalIdResponse":
        return await self._unary_unary(
            "/keyapis.vc.v1.CameraService/GetCameraRtspUrlExternalId",
            get_camera_rtsp_url_external_id_request,
            GetCameraRtspUrlExternalIdResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def put_camera_room_attach(
        self,
        put_camera_room_attach_request: "PutCameraRoomAttachRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "PutCameraRoomAttachResponse":
        return await self._unary_unary(
            "/keyapis.vc.v1.CameraService/PutCameraRoomAttach",
            put_camera_room_attach_request,
            PutCameraRoomAttachResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def put_camera_room_detach(
        self,
        put_camera_room_detach_request: "PutCameraRoomDetachRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "PutCameraRoomDetachResponse":
        return await self._unary_unary(
            "/keyapis.vc.v1.CameraService/PutCameraRoomDetach",
            put_camera_room_detach_request,
            PutCameraRoomDetachResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def put_camera_room_attach_list(
        self,
        put_camera_room_attach_list_request: "PutCameraRoomAttachListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "PutCameraRoomAttachListResponse":
        return await self._unary_unary(
            "/keyapis.vc.v1.CameraService/PutCameraRoomAttachList",
            put_camera_room_attach_list_request,
            PutCameraRoomAttachListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def put_camera_room_detach_list(
        self,
        put_camera_room_detach_list_request: "PutCameraRoomDetachListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "PutCameraRoomDetachListResponse":
        return await self._unary_unary(
            "/keyapis.vc.v1.CameraService/PutCameraRoomDetachList",
            put_camera_room_detach_list_request,
            PutCameraRoomDetachListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def delete_camera(
        self,
        delete_camera_request: "DeleteCameraRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "DeleteCameraResponse":
        return await self._unary_unary(
            "/keyapis.vc.v1.CameraService/DeleteCamera",
            delete_camera_request,
            DeleteCameraResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def post_camera(
        self,
        post_camera_request: "PostCameraRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "PostCameraResponse":
        return await self._unary_unary(
            "/keyapis.vc.v1.CameraService/PostCamera",
            post_camera_request,
            PostCameraResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_camera_calendar(
        self,
        get_camera_calendar_request: "GetCameraCalendarRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetCameraCalendarResponse":
        return await self._unary_unary(
            "/keyapis.vc.v1.CameraService/GetCameraCalendar",
            get_camera_calendar_request,
            GetCameraCalendarResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_camera_intervals(
        self,
        get_camera_intervals_request: "GetCameraIntervalsRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetCameraIntervalsResponse":
        return await self._unary_unary(
            "/keyapis.vc.v1.CameraService/GetCameraIntervals",
            get_camera_intervals_request,
            GetCameraIntervalsResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class CameraCollectionServiceStub(betterproto.ServiceStub):
    async def get_camera_collection(
        self,
        get_camera_collection_request: "GetCameraCollectionRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetCameraCollectionResponse":
        return await self._unary_unary(
            "/keyapis.vc.v1.CameraCollectionService/GetCameraCollection",
            get_camera_collection_request,
            GetCameraCollectionResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_camera_collection_list(
        self,
        get_camera_collection_list_request: "GetCameraCollectionListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> AsyncIterator["GetCameraCollectionListResponse"]:
        async for response in self._unary_stream(
            "/keyapis.vc.v1.CameraCollectionService/GetCameraCollectionList",
            get_camera_collection_list_request,
            GetCameraCollectionListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        ):
            yield response

    async def get_camera_collection_count(
        self,
        get_camera_collection_count_request: "GetCameraCollectionCountRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetCameraCollectionCountResponse":
        return await self._unary_unary(
            "/keyapis.vc.v1.CameraCollectionService/GetCameraCollectionCount",
            get_camera_collection_count_request,
            GetCameraCollectionCountResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def save_camera_collection(
        self,
        save_camera_collection_request: "SaveCameraCollectionRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "SaveCameraCollectionResponse":
        return await self._unary_unary(
            "/keyapis.vc.v1.CameraCollectionService/SaveCameraCollection",
            save_camera_collection_request,
            SaveCameraCollectionResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def delete_camera_collection(
        self,
        delete_camera_collection_request: "DeleteCameraCollectionRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "DeleteCameraCollectionResponse":
        return await self._unary_unary(
            "/keyapis.vc.v1.CameraCollectionService/DeleteCameraCollection",
            delete_camera_collection_request,
            DeleteCameraCollectionResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def post_camera_collection_restore(
        self,
        post_camera_collection_restore_request: "PostCameraCollectionRestoreRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "PostCameraCollectionRestoreResponse":
        return await self._unary_unary(
            "/keyapis.vc.v1.CameraCollectionService/PostCameraCollectionRestore",
            post_camera_collection_restore_request,
            PostCameraCollectionRestoreResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class CameraLocationDataServiceStub(betterproto.ServiceStub):
    async def get_camera_location_data(
        self,
        get_camera_location_data_request: "GetCameraLocationDataRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetCameraLocationDataResponse":
        return await self._unary_unary(
            "/keyapis.vc.v1.CameraLocationDataService/GetCameraLocationData",
            get_camera_location_data_request,
            GetCameraLocationDataResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class CameraVideoDataServiceStub(betterproto.ServiceStub):
    async def get_camera_video_data_count(
        self,
        get_camera_video_data_count_request: "GetCameraVideoDataCountRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetCameraVideoDataCountResponse":
        return await self._unary_unary(
            "/keyapis.vc.v1.CameraVideoDataService/GetCameraVideoDataCount",
            get_camera_video_data_count_request,
            GetCameraVideoDataCountResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_camera_video_data_list(
        self,
        get_camera_video_data_list_request: "GetCameraVideoDataListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetCameraVideoDataListResponse":
        return await self._unary_unary(
            "/keyapis.vc.v1.CameraVideoDataService/GetCameraVideoDataList",
            get_camera_video_data_list_request,
            GetCameraVideoDataListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class CompanyServiceStub(betterproto.ServiceStub):
    async def post_company_impersonation(
        self,
        post_company_impersonation_request: "PostCompanyImpersonationRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "PostCompanyImpersonationResponse":
        return await self._unary_unary(
            "/keyapis.vc.v1.CompanyService/PostCompanyImpersonation",
            post_company_impersonation_request,
            PostCompanyImpersonationResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class CameraServiceBase(ServiceBase):

    async def get_camera_room_count(
        self, get_camera_room_count_request: "GetCameraRoomCountRequest"
    ) -> "GetCameraRoomCountResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_camera_room_list(
        self, get_camera_room_list_request: "GetCameraRoomListRequest"
    ) -> AsyncIterator["GetCameraRoomListResponse"]:
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_camera(
        self, get_camera_request: "GetCameraRequest"
    ) -> "GetCameraResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_camera_list(
        self, get_camera_list_request: "GetCameraListRequest"
    ) -> "GetCameraListResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_camera_rtsp_url_external_id(
        self,
        get_camera_rtsp_url_external_id_request: "GetCameraRtspUrlExternalIdRequest",
    ) -> "GetCameraRtspUrlExternalIdResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def put_camera_room_attach(
        self, put_camera_room_attach_request: "PutCameraRoomAttachRequest"
    ) -> "PutCameraRoomAttachResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def put_camera_room_detach(
        self, put_camera_room_detach_request: "PutCameraRoomDetachRequest"
    ) -> "PutCameraRoomDetachResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def put_camera_room_attach_list(
        self, put_camera_room_attach_list_request: "PutCameraRoomAttachListRequest"
    ) -> "PutCameraRoomAttachListResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def put_camera_room_detach_list(
        self, put_camera_room_detach_list_request: "PutCameraRoomDetachListRequest"
    ) -> "PutCameraRoomDetachListResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def delete_camera(
        self, delete_camera_request: "DeleteCameraRequest"
    ) -> "DeleteCameraResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def post_camera(
        self, post_camera_request: "PostCameraRequest"
    ) -> "PostCameraResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_camera_calendar(
        self, get_camera_calendar_request: "GetCameraCalendarRequest"
    ) -> "GetCameraCalendarResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_camera_intervals(
        self, get_camera_intervals_request: "GetCameraIntervalsRequest"
    ) -> "GetCameraIntervalsResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_get_camera_room_count(
        self,
        stream: "grpclib.server.Stream[GetCameraRoomCountRequest, GetCameraRoomCountResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_camera_room_count(request)
        await stream.send_message(response)

    async def __rpc_get_camera_room_list(
        self,
        stream: "grpclib.server.Stream[GetCameraRoomListRequest, GetCameraRoomListResponse]",
    ) -> None:
        request = await stream.recv_message()
        await self._call_rpc_handler_server_stream(
            self.get_camera_room_list,
            stream,
            request,
        )

    async def __rpc_get_camera(
        self, stream: "grpclib.server.Stream[GetCameraRequest, GetCameraResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_camera(request)
        await stream.send_message(response)

    async def __rpc_get_camera_list(
        self,
        stream: "grpclib.server.Stream[GetCameraListRequest, GetCameraListResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_camera_list(request)
        await stream.send_message(response)

    async def __rpc_get_camera_rtsp_url_external_id(
        self,
        stream: "grpclib.server.Stream[GetCameraRtspUrlExternalIdRequest, GetCameraRtspUrlExternalIdResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_camera_rtsp_url_external_id(request)
        await stream.send_message(response)

    async def __rpc_put_camera_room_attach(
        self,
        stream: "grpclib.server.Stream[PutCameraRoomAttachRequest, PutCameraRoomAttachResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.put_camera_room_attach(request)
        await stream.send_message(response)

    async def __rpc_put_camera_room_detach(
        self,
        stream: "grpclib.server.Stream[PutCameraRoomDetachRequest, PutCameraRoomDetachResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.put_camera_room_detach(request)
        await stream.send_message(response)

    async def __rpc_put_camera_room_attach_list(
        self,
        stream: "grpclib.server.Stream[PutCameraRoomAttachListRequest, PutCameraRoomAttachListResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.put_camera_room_attach_list(request)
        await stream.send_message(response)

    async def __rpc_put_camera_room_detach_list(
        self,
        stream: "grpclib.server.Stream[PutCameraRoomDetachListRequest, PutCameraRoomDetachListResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.put_camera_room_detach_list(request)
        await stream.send_message(response)

    async def __rpc_delete_camera(
        self, stream: "grpclib.server.Stream[DeleteCameraRequest, DeleteCameraResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.delete_camera(request)
        await stream.send_message(response)

    async def __rpc_post_camera(
        self, stream: "grpclib.server.Stream[PostCameraRequest, PostCameraResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_camera(request)
        await stream.send_message(response)

    async def __rpc_get_camera_calendar(
        self,
        stream: "grpclib.server.Stream[GetCameraCalendarRequest, GetCameraCalendarResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_camera_calendar(request)
        await stream.send_message(response)

    async def __rpc_get_camera_intervals(
        self,
        stream: "grpclib.server.Stream[GetCameraIntervalsRequest, GetCameraIntervalsResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_camera_intervals(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/keyapis.vc.v1.CameraService/GetCameraRoomCount": grpclib.const.Handler(
                self.__rpc_get_camera_room_count,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetCameraRoomCountRequest,
                GetCameraRoomCountResponse,
            ),
            "/keyapis.vc.v1.CameraService/GetCameraRoomList": grpclib.const.Handler(
                self.__rpc_get_camera_room_list,
                grpclib.const.Cardinality.UNARY_STREAM,
                GetCameraRoomListRequest,
                GetCameraRoomListResponse,
            ),
            "/keyapis.vc.v1.CameraService/GetCamera": grpclib.const.Handler(
                self.__rpc_get_camera,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetCameraRequest,
                GetCameraResponse,
            ),
            "/keyapis.vc.v1.CameraService/GetCameraList": grpclib.const.Handler(
                self.__rpc_get_camera_list,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetCameraListRequest,
                GetCameraListResponse,
            ),
            "/keyapis.vc.v1.CameraService/GetCameraRtspUrlExternalId": grpclib.const.Handler(
                self.__rpc_get_camera_rtsp_url_external_id,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetCameraRtspUrlExternalIdRequest,
                GetCameraRtspUrlExternalIdResponse,
            ),
            "/keyapis.vc.v1.CameraService/PutCameraRoomAttach": grpclib.const.Handler(
                self.__rpc_put_camera_room_attach,
                grpclib.const.Cardinality.UNARY_UNARY,
                PutCameraRoomAttachRequest,
                PutCameraRoomAttachResponse,
            ),
            "/keyapis.vc.v1.CameraService/PutCameraRoomDetach": grpclib.const.Handler(
                self.__rpc_put_camera_room_detach,
                grpclib.const.Cardinality.UNARY_UNARY,
                PutCameraRoomDetachRequest,
                PutCameraRoomDetachResponse,
            ),
            "/keyapis.vc.v1.CameraService/PutCameraRoomAttachList": grpclib.const.Handler(
                self.__rpc_put_camera_room_attach_list,
                grpclib.const.Cardinality.UNARY_UNARY,
                PutCameraRoomAttachListRequest,
                PutCameraRoomAttachListResponse,
            ),
            "/keyapis.vc.v1.CameraService/PutCameraRoomDetachList": grpclib.const.Handler(
                self.__rpc_put_camera_room_detach_list,
                grpclib.const.Cardinality.UNARY_UNARY,
                PutCameraRoomDetachListRequest,
                PutCameraRoomDetachListResponse,
            ),
            "/keyapis.vc.v1.CameraService/DeleteCamera": grpclib.const.Handler(
                self.__rpc_delete_camera,
                grpclib.const.Cardinality.UNARY_UNARY,
                DeleteCameraRequest,
                DeleteCameraResponse,
            ),
            "/keyapis.vc.v1.CameraService/PostCamera": grpclib.const.Handler(
                self.__rpc_post_camera,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostCameraRequest,
                PostCameraResponse,
            ),
            "/keyapis.vc.v1.CameraService/GetCameraCalendar": grpclib.const.Handler(
                self.__rpc_get_camera_calendar,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetCameraCalendarRequest,
                GetCameraCalendarResponse,
            ),
            "/keyapis.vc.v1.CameraService/GetCameraIntervals": grpclib.const.Handler(
                self.__rpc_get_camera_intervals,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetCameraIntervalsRequest,
                GetCameraIntervalsResponse,
            ),
        }


class CameraCollectionServiceBase(ServiceBase):

    async def get_camera_collection(
        self, get_camera_collection_request: "GetCameraCollectionRequest"
    ) -> "GetCameraCollectionResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_camera_collection_list(
        self, get_camera_collection_list_request: "GetCameraCollectionListRequest"
    ) -> AsyncIterator["GetCameraCollectionListResponse"]:
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_camera_collection_count(
        self, get_camera_collection_count_request: "GetCameraCollectionCountRequest"
    ) -> "GetCameraCollectionCountResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def save_camera_collection(
        self, save_camera_collection_request: "SaveCameraCollectionRequest"
    ) -> "SaveCameraCollectionResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def delete_camera_collection(
        self, delete_camera_collection_request: "DeleteCameraCollectionRequest"
    ) -> "DeleteCameraCollectionResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def post_camera_collection_restore(
        self,
        post_camera_collection_restore_request: "PostCameraCollectionRestoreRequest",
    ) -> "PostCameraCollectionRestoreResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_get_camera_collection(
        self,
        stream: "grpclib.server.Stream[GetCameraCollectionRequest, GetCameraCollectionResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_camera_collection(request)
        await stream.send_message(response)

    async def __rpc_get_camera_collection_list(
        self,
        stream: "grpclib.server.Stream[GetCameraCollectionListRequest, GetCameraCollectionListResponse]",
    ) -> None:
        request = await stream.recv_message()
        await self._call_rpc_handler_server_stream(
            self.get_camera_collection_list,
            stream,
            request,
        )

    async def __rpc_get_camera_collection_count(
        self,
        stream: "grpclib.server.Stream[GetCameraCollectionCountRequest, GetCameraCollectionCountResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_camera_collection_count(request)
        await stream.send_message(response)

    async def __rpc_save_camera_collection(
        self,
        stream: "grpclib.server.Stream[SaveCameraCollectionRequest, SaveCameraCollectionResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.save_camera_collection(request)
        await stream.send_message(response)

    async def __rpc_delete_camera_collection(
        self,
        stream: "grpclib.server.Stream[DeleteCameraCollectionRequest, DeleteCameraCollectionResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.delete_camera_collection(request)
        await stream.send_message(response)

    async def __rpc_post_camera_collection_restore(
        self,
        stream: "grpclib.server.Stream[PostCameraCollectionRestoreRequest, PostCameraCollectionRestoreResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_camera_collection_restore(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/keyapis.vc.v1.CameraCollectionService/GetCameraCollection": grpclib.const.Handler(
                self.__rpc_get_camera_collection,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetCameraCollectionRequest,
                GetCameraCollectionResponse,
            ),
            "/keyapis.vc.v1.CameraCollectionService/GetCameraCollectionList": grpclib.const.Handler(
                self.__rpc_get_camera_collection_list,
                grpclib.const.Cardinality.UNARY_STREAM,
                GetCameraCollectionListRequest,
                GetCameraCollectionListResponse,
            ),
            "/keyapis.vc.v1.CameraCollectionService/GetCameraCollectionCount": grpclib.const.Handler(
                self.__rpc_get_camera_collection_count,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetCameraCollectionCountRequest,
                GetCameraCollectionCountResponse,
            ),
            "/keyapis.vc.v1.CameraCollectionService/SaveCameraCollection": grpclib.const.Handler(
                self.__rpc_save_camera_collection,
                grpclib.const.Cardinality.UNARY_UNARY,
                SaveCameraCollectionRequest,
                SaveCameraCollectionResponse,
            ),
            "/keyapis.vc.v1.CameraCollectionService/DeleteCameraCollection": grpclib.const.Handler(
                self.__rpc_delete_camera_collection,
                grpclib.const.Cardinality.UNARY_UNARY,
                DeleteCameraCollectionRequest,
                DeleteCameraCollectionResponse,
            ),
            "/keyapis.vc.v1.CameraCollectionService/PostCameraCollectionRestore": grpclib.const.Handler(
                self.__rpc_post_camera_collection_restore,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostCameraCollectionRestoreRequest,
                PostCameraCollectionRestoreResponse,
            ),
        }


class CameraLocationDataServiceBase(ServiceBase):

    async def get_camera_location_data(
        self, get_camera_location_data_request: "GetCameraLocationDataRequest"
    ) -> "GetCameraLocationDataResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_get_camera_location_data(
        self,
        stream: "grpclib.server.Stream[GetCameraLocationDataRequest, GetCameraLocationDataResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_camera_location_data(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/keyapis.vc.v1.CameraLocationDataService/GetCameraLocationData": grpclib.const.Handler(
                self.__rpc_get_camera_location_data,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetCameraLocationDataRequest,
                GetCameraLocationDataResponse,
            ),
        }


class CameraVideoDataServiceBase(ServiceBase):

    async def get_camera_video_data_count(
        self, get_camera_video_data_count_request: "GetCameraVideoDataCountRequest"
    ) -> "GetCameraVideoDataCountResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_camera_video_data_list(
        self, get_camera_video_data_list_request: "GetCameraVideoDataListRequest"
    ) -> "GetCameraVideoDataListResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_get_camera_video_data_count(
        self,
        stream: "grpclib.server.Stream[GetCameraVideoDataCountRequest, GetCameraVideoDataCountResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_camera_video_data_count(request)
        await stream.send_message(response)

    async def __rpc_get_camera_video_data_list(
        self,
        stream: "grpclib.server.Stream[GetCameraVideoDataListRequest, GetCameraVideoDataListResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_camera_video_data_list(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/keyapis.vc.v1.CameraVideoDataService/GetCameraVideoDataCount": grpclib.const.Handler(
                self.__rpc_get_camera_video_data_count,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetCameraVideoDataCountRequest,
                GetCameraVideoDataCountResponse,
            ),
            "/keyapis.vc.v1.CameraVideoDataService/GetCameraVideoDataList": grpclib.const.Handler(
                self.__rpc_get_camera_video_data_list,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetCameraVideoDataListRequest,
                GetCameraVideoDataListResponse,
            ),
        }


class CompanyServiceBase(ServiceBase):

    async def post_company_impersonation(
        self, post_company_impersonation_request: "PostCompanyImpersonationRequest"
    ) -> "PostCompanyImpersonationResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_post_company_impersonation(
        self,
        stream: "grpclib.server.Stream[PostCompanyImpersonationRequest, PostCompanyImpersonationResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_company_impersonation(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/keyapis.vc.v1.CompanyService/PostCompanyImpersonation": grpclib.const.Handler(
                self.__rpc_post_company_impersonation,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostCompanyImpersonationRequest,
                PostCompanyImpersonationResponse,
            ),
        }
