# Generated by the protocol buffer compiler.  DO NOT EDIT!
# sources: keyapis/dadata/v1/keyapis_dadata_sync_v1.proto
# plugin: python-betterproto
from dataclasses import dataclass
from typing import (
    TYPE_CHECKING,
    Dict,
    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


@dataclass(eq=False, repr=False)
class PostSyncOrponRequest(betterproto.Message):
    """Запрос синхронизации дома по ОРПОНу"""

    orpon: int = betterproto.int64_field(1)
    """ОРПОН дома. # Диапазон: 1..9223372036854775807"""


@dataclass(eq=False, repr=False)
class PostSyncOrponResponse(betterproto.Message):
    """Ответ на запрос синхронизации дома по ОРПОНу"""

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


@dataclass(eq=False, repr=False)
class PostSyncOrponResponseError(betterproto.Message):
    """Ошибка"""

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


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

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

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


class DaDataSyncServiceStub(betterproto.ServiceStub):
    async def post_sync_orpon(
        self,
        post_sync_orpon_request: "PostSyncOrponRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "PostSyncOrponResponse":
        return await self._unary_unary(
            "/keyapis.dadata.v1.DaDataSyncService/PostSyncOrpon",
            post_sync_orpon_request,
            PostSyncOrponResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class DaDataSyncServiceBase(ServiceBase):

    async def post_sync_orpon(
        self, post_sync_orpon_request: "PostSyncOrponRequest"
    ) -> "PostSyncOrponResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_post_sync_orpon(
        self,
        stream: "grpclib.server.Stream[PostSyncOrponRequest, PostSyncOrponResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_sync_orpon(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/keyapis.dadata.v1.DaDataSyncService/PostSyncOrpon": grpclib.const.Handler(
                self.__rpc_post_sync_orpon,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostSyncOrponRequest,
                PostSyncOrponResponse,
            ),
        }
