# Generated by the protocol buffer compiler.  DO NOT EDIT!
# sources: keyapis/tag/v1/keyapis_tag_system_v1.proto, keyapis/tag/v1/keyapis_tag_tag_v1.proto
# plugin: python-betterproto
from dataclasses import dataclass
from typing import (
    TYPE_CHECKING,
    AsyncIterator,
    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 GetTagListRequest(betterproto.Message):
    """Запрос получения списка тэгов"""

    pass


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

    data: str = betterproto.string_field(1, group="type")
    """Пользовательский тэг"""


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

    pass


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

    pass


class TagServiceStub(betterproto.ServiceStub):
    async def get_tag_list(
        self,
        get_tag_list_request: "GetTagListRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> AsyncIterator["GetTagListResponse"]:
        async for response in self._unary_stream(
            "/keyapis.tag.v1.TagService/GetTagList",
            get_tag_list_request,
            GetTagListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        ):
            yield response


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


class TagServiceBase(ServiceBase):

    async def get_tag_list(
        self, get_tag_list_request: "GetTagListRequest"
    ) -> AsyncIterator["GetTagListResponse"]:
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_get_tag_list(
        self, stream: "grpclib.server.Stream[GetTagListRequest, GetTagListResponse]"
    ) -> None:
        request = await stream.recv_message()
        await self._call_rpc_handler_server_stream(
            self.get_tag_list,
            stream,
            request,
        )

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/keyapis.tag.v1.TagService/GetTagList": grpclib.const.Handler(
                self.__rpc_get_tag_list,
                grpclib.const.Cardinality.UNARY_STREAM,
                GetTagListRequest,
                GetTagListResponse,
            ),
        }


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