# 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
# This file has been @generated

from collections.abc import AsyncIterator
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 GetTagListRequest(betterproto.Message):
    """Запрос получения списка тэгов"""

    pass


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

    data: "str | None" = betterproto.string_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 GetSystemStatusRequest(betterproto.Message):
    """Запрос проверки доступности сервиса"""

    pass


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

    pass


class TagServiceStub(betterproto.ServiceStub):
    async def get_tag_list(
        self,
        get_tag_list_request: "GetTagListRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = 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: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = 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)
        yield GetTagListResponse()

    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,
            ),
        }
