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

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


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

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


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

    error: "PostSyncOrponResponseError | 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 PostSyncOrponResponseError(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 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: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = 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,
            ),
        }


rebuild_dataclass(PostSyncOrponResponse)  # type: ignore
rebuild_dataclass(PostSyncOrponResponseError)  # type: ignore
