# Generated by the protocol buffer compiler.  DO NOT EDIT!
# sources: keyapis/encryption_profile/v1/keyapis_encryption_profile_encryption_profile_v1.proto, keyapis/encryption_profile/v1/keyapis_encryption_profile_system_v1.proto
# plugin: python-betterproto
# This file has been @generated

from collections.abc import AsyncIterator
from datetime import datetime
from typing import TYPE_CHECKING

import betterproto
import grpclib
from betterproto.grpc.grpclib_server import ServiceBase
from pydantic import model_validator
from pydantic.dataclasses import (
    dataclass,
    rebuild_dataclass,
)

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


class EncryptionProfileType(betterproto.Enum):
    """
    Справочник типов профиля шифрования.
     # Тип: byte
    """

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

    SL3 = 1
    """Тип SL3"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


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

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

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

    CHANGED_AT = 2
    """Дата последнего изменения"""

    CREATED_AT = 3
    """Дата создания"""

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

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


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

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

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

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

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


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

    pass


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

    pass


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class EncryptionProfile(betterproto.Message):
    """
    Профиль шифрования.
     # Описание модели
    """

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

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

    description: "str | None" = betterproto.message_field(
        3, wraps=betterproto.TYPE_STRING
    )
    """
    Описание.
     # Диапазон: 3..1000
    """

    type: "EncryptionProfileType" = betterproto.enum_field(4)
    """Тип профиля шифрования"""

    sector_number: int = betterproto.int32_field(5)
    """
    Номер сектора.
     # Диапазон: 0..15
    """

    block_number: int = betterproto.int32_field(6)
    """
    Номер блока.
     # Диапазон: 0..3
    """

    start_index: int = betterproto.int32_field(7)
    """
    Индекс первого символа для секрета.
     # Диапазон: 0..31
    """

    end_index: int = betterproto.int32_field(8)
    """
    Индекс последнего символа для секрета.
     # Диапазон: 0..31
    """

    secret_a: str = betterproto.string_field(9)
    """
    Пароль A профиля.
     # Диапазон: 16..32
    """

    encrypted_secret_a: str = betterproto.string_field(10)
    """Зашифрованный пароль B профиля"""

    secret_b: str = betterproto.string_field(11)
    """
    Пароль B профиля.
     # Диапазон: 16..32
    """

    encrypted_secret_b: str = betterproto.string_field(12)
    """Зашифрованный пароль B профиля"""

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

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

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


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

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

    range_is_too_small: "EncryptionProfileSavingErrorRangeIsTooSmall | None" = (
        betterproto.message_field(2, optional=True, group="reason")
    )
    """Указанный диапазон не соответствует минимальному значению"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


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

    pass


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class EncryptionProfileSavingErrorRangeIsTooSmall(betterproto.Message):
    """
    Указанный диапазон не соответствует минимальному значению.
     Причины:
     - Модуль разности между полями start_index и end_index меньше 7
    """

    pass


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class EncryptionProfileFilter(betterproto.Message):
    """Фильтр по профилям шифрования"""

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

    types: "list[EncryptionProfileType]" = betterproto.enum_field(2)
    """По типам профиля шифрования"""

    show_deleted: "bool | None" = betterproto.message_field(
        3, wraps=betterproto.TYPE_BOOL
    )
    """Показывать удаленные"""


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

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

    direction_type: "EncryptionProfilePagingDirectionType" = 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, config={"extra": "forbid"})
class PostEncryptionProfileRequest(betterproto.Message):
    """Запрос сохранения шифрования по идентификатору"""

    data: "EncryptionProfile" = betterproto.message_field(1)
    """Профиль шифрования"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PostEncryptionProfileResponse(betterproto.Message):
    """Ответ на запрос сохранения шифрования по идентификатору"""

    data: "EncryptionProfile | None" = betterproto.message_field(
        1, optional=True, group="type"
    )
    """Профиль шифрования"""

    error: "PostEncryptionProfileResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PostEncryptionProfileResponseError(betterproto.Message):
    """Ошибка запроса сохранения профиля шифрования"""

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

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

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetEncryptionProfileListRequest(betterproto.Message):
    """Запрос на получение списка профилей шифрования"""

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

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

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetEncryptionProfileListResponse(betterproto.Message):
    """Ответ на получение списка профилей шифрования"""

    data: "EncryptionProfile | None" = betterproto.message_field(
        1, optional=True, group="type"
    )
    """Профиль шифрования"""

    error: "GetEncryptionProfileListResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetEncryptionProfileListResponseError(betterproto.Message):
    """Ошибка запроса получения списка профилей шифрования"""

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

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetEncryptionProfileRequest(betterproto.Message):
    """Запрос получения профиля шифрования"""

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


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetEncryptionProfileResponse(betterproto.Message):
    """Ответ на запрос получения профиля шифрования"""

    data: "EncryptionProfile | None" = betterproto.message_field(
        1, optional=True, group="type"
    )
    """Профиль шифрования"""

    error: "GetEncryptionProfileResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


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

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

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetEncryptionProfileCountRequest(betterproto.Message):
    """Запрос получения количества профилей шифрования"""

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


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetEncryptionProfileCountResponse(betterproto.Message):
    """Ответ на запрос получения количества профилей шифрования"""

    data: "int | None" = betterproto.int32_field(1, optional=True, group="type")
    """Всего устройтсв"""

    error: "GetEncryptionProfileCountResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetEncryptionProfileCountResponseError(betterproto.Message):
    """Ошибка запроса получения количества профилей шифрования"""

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

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class DeleteEncryptionProfileRequest(betterproto.Message):
    """Запрос удаления профиля шифрования"""

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


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class DeleteEncryptionProfileResponse(betterproto.Message):
    """Ответ на запрос удаления профиля шифрования"""

    error: "DeleteEncryptionProfileResponseError | None" = betterproto.message_field(
        1, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class DeleteEncryptionProfileResponseError(betterproto.Message):
    """Ошибка запроса удаления профиля шифрования"""

    linked_devices_exists: (
        "DeleteEncryptionProfileResponseErrorLinkedDevicesExists | None"
    ) = betterproto.message_field(1, optional=True, group="reason")
    """Существуют устройства, связанные с этим профилем шифрования"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class DeleteEncryptionProfileResponseErrorLinkedDevicesExists(betterproto.Message):
    """
    Существуют устройства, связанные с этим профилем шифрования.
     Следует отвязать устройства перед удалением профиля
    """

    pass


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PostEncryptionProfileRestoreRequest(betterproto.Message):
    """Запрос разархивации шифрования по идентификатору"""

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


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PostEncryptionProfileRestoreResponse(betterproto.Message):
    """Отвест на запрос разархивации шифрования по идентификатору"""

    pass


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

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

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


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


class EncryptionProfileServiceStub(betterproto.ServiceStub):
    async def post_encryption_profile(
        self,
        post_encryption_profile_request: "PostEncryptionProfileRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "PostEncryptionProfileResponse":
        return await self._unary_unary(
            "/keyapis.encryption_profile.v1.EncryptionProfileService/PostEncryptionProfile",
            post_encryption_profile_request,
            PostEncryptionProfileResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_encryption_profile(
        self,
        get_encryption_profile_request: "GetEncryptionProfileRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "GetEncryptionProfileResponse":
        return await self._unary_unary(
            "/keyapis.encryption_profile.v1.EncryptionProfileService/GetEncryptionProfile",
            get_encryption_profile_request,
            GetEncryptionProfileResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_encryption_profile_list(
        self,
        get_encryption_profile_list_request: "GetEncryptionProfileListRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "AsyncIterator[GetEncryptionProfileListResponse]":
        async for response in self._unary_stream(
            "/keyapis.encryption_profile.v1.EncryptionProfileService/GetEncryptionProfileList",
            get_encryption_profile_list_request,
            GetEncryptionProfileListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        ):
            yield response

    async def get_encryption_profile_count(
        self,
        get_encryption_profile_count_request: "GetEncryptionProfileCountRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "GetEncryptionProfileCountResponse":
        return await self._unary_unary(
            "/keyapis.encryption_profile.v1.EncryptionProfileService/GetEncryptionProfileCount",
            get_encryption_profile_count_request,
            GetEncryptionProfileCountResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def delete_encryption_profile(
        self,
        delete_encryption_profile_request: "DeleteEncryptionProfileRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "DeleteEncryptionProfileResponse":
        return await self._unary_unary(
            "/keyapis.encryption_profile.v1.EncryptionProfileService/DeleteEncryptionProfile",
            delete_encryption_profile_request,
            DeleteEncryptionProfileResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def post_encryption_profile_restore(
        self,
        post_encryption_profile_restore_request: "PostEncryptionProfileRestoreRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "PostEncryptionProfileRestoreResponse":
        return await self._unary_unary(
            "/keyapis.encryption_profile.v1.EncryptionProfileService/PostEncryptionProfileRestore",
            post_encryption_profile_restore_request,
            PostEncryptionProfileRestoreResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


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.encryption_profile.v1.SystemService/GetSystemStatus": grpclib.const.Handler(
                self.__rpc_get_system_status,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetSystemStatusRequest,
                GetSystemStatusResponse,
            ),
        }


class EncryptionProfileServiceBase(ServiceBase):

    async def post_encryption_profile(
        self, post_encryption_profile_request: "PostEncryptionProfileRequest"
    ) -> "PostEncryptionProfileResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_encryption_profile(
        self, get_encryption_profile_request: "GetEncryptionProfileRequest"
    ) -> "GetEncryptionProfileResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_encryption_profile_list(
        self, get_encryption_profile_list_request: "GetEncryptionProfileListRequest"
    ) -> "AsyncIterator[GetEncryptionProfileListResponse]":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)
        yield GetEncryptionProfileListResponse()

    async def get_encryption_profile_count(
        self, get_encryption_profile_count_request: "GetEncryptionProfileCountRequest"
    ) -> "GetEncryptionProfileCountResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def delete_encryption_profile(
        self, delete_encryption_profile_request: "DeleteEncryptionProfileRequest"
    ) -> "DeleteEncryptionProfileResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def post_encryption_profile_restore(
        self,
        post_encryption_profile_restore_request: "PostEncryptionProfileRestoreRequest",
    ) -> "PostEncryptionProfileRestoreResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_post_encryption_profile(
        self,
        stream: "grpclib.server.Stream[PostEncryptionProfileRequest, PostEncryptionProfileResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_encryption_profile(request)
        await stream.send_message(response)

    async def __rpc_get_encryption_profile(
        self,
        stream: "grpclib.server.Stream[GetEncryptionProfileRequest, GetEncryptionProfileResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_encryption_profile(request)
        await stream.send_message(response)

    async def __rpc_get_encryption_profile_list(
        self,
        stream: "grpclib.server.Stream[GetEncryptionProfileListRequest, GetEncryptionProfileListResponse]",
    ) -> None:
        request = await stream.recv_message()
        await self._call_rpc_handler_server_stream(
            self.get_encryption_profile_list,
            stream,
            request,
        )

    async def __rpc_get_encryption_profile_count(
        self,
        stream: "grpclib.server.Stream[GetEncryptionProfileCountRequest, GetEncryptionProfileCountResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_encryption_profile_count(request)
        await stream.send_message(response)

    async def __rpc_delete_encryption_profile(
        self,
        stream: "grpclib.server.Stream[DeleteEncryptionProfileRequest, DeleteEncryptionProfileResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.delete_encryption_profile(request)
        await stream.send_message(response)

    async def __rpc_post_encryption_profile_restore(
        self,
        stream: "grpclib.server.Stream[PostEncryptionProfileRestoreRequest, PostEncryptionProfileRestoreResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_encryption_profile_restore(request)
        await stream.send_message(response)

    def __mapping__(self) -> "dict[str, grpclib.const.Handler]":
        return {
            "/keyapis.encryption_profile.v1.EncryptionProfileService/PostEncryptionProfile": grpclib.const.Handler(
                self.__rpc_post_encryption_profile,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostEncryptionProfileRequest,
                PostEncryptionProfileResponse,
            ),
            "/keyapis.encryption_profile.v1.EncryptionProfileService/GetEncryptionProfile": grpclib.const.Handler(
                self.__rpc_get_encryption_profile,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetEncryptionProfileRequest,
                GetEncryptionProfileResponse,
            ),
            "/keyapis.encryption_profile.v1.EncryptionProfileService/GetEncryptionProfileList": grpclib.const.Handler(
                self.__rpc_get_encryption_profile_list,
                grpclib.const.Cardinality.UNARY_STREAM,
                GetEncryptionProfileListRequest,
                GetEncryptionProfileListResponse,
            ),
            "/keyapis.encryption_profile.v1.EncryptionProfileService/GetEncryptionProfileCount": grpclib.const.Handler(
                self.__rpc_get_encryption_profile_count,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetEncryptionProfileCountRequest,
                GetEncryptionProfileCountResponse,
            ),
            "/keyapis.encryption_profile.v1.EncryptionProfileService/DeleteEncryptionProfile": grpclib.const.Handler(
                self.__rpc_delete_encryption_profile,
                grpclib.const.Cardinality.UNARY_UNARY,
                DeleteEncryptionProfileRequest,
                DeleteEncryptionProfileResponse,
            ),
            "/keyapis.encryption_profile.v1.EncryptionProfileService/PostEncryptionProfileRestore": grpclib.const.Handler(
                self.__rpc_post_encryption_profile_restore,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostEncryptionProfileRestoreRequest,
                PostEncryptionProfileRestoreResponse,
            ),
        }


rebuild_dataclass(EncryptionProfile)  # type: ignore
rebuild_dataclass(EncryptionProfileSavingError)  # type: ignore
rebuild_dataclass(EncryptionProfileFilter)  # type: ignore
rebuild_dataclass(EncryptionProfilePaging)  # type: ignore
rebuild_dataclass(PostEncryptionProfileRequest)  # type: ignore
rebuild_dataclass(PostEncryptionProfileResponse)  # type: ignore
rebuild_dataclass(PostEncryptionProfileResponseError)  # type: ignore
rebuild_dataclass(GetEncryptionProfileListRequest)  # type: ignore
rebuild_dataclass(GetEncryptionProfileListResponse)  # type: ignore
rebuild_dataclass(GetEncryptionProfileListResponseError)  # type: ignore
rebuild_dataclass(GetEncryptionProfileResponse)  # type: ignore
rebuild_dataclass(GetEncryptionProfileResponseError)  # type: ignore
rebuild_dataclass(GetEncryptionProfileCountRequest)  # type: ignore
rebuild_dataclass(GetEncryptionProfileCountResponse)  # type: ignore
rebuild_dataclass(GetEncryptionProfileCountResponseError)  # type: ignore
rebuild_dataclass(DeleteEncryptionProfileResponse)  # type: ignore
rebuild_dataclass(DeleteEncryptionProfileResponseError)  # type: ignore
