# Generated by the protocol buffer compiler.  DO NOT EDIT!
# sources: keyapis/ad/v1/keyapis_ad_marketplace_v1.proto, keyapis/ad/v1/keyapis_ad_salepoint_v1.proto, keyapis/ad/v1/keyapis_ad_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 MarketplaceType(betterproto.Enum):
    """Справочник типов маркетплейсов"""

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

    OZON = 1
    """Озон"""

    WILDBERRIES = 2
    """Вайлдберриз"""

    YANDEX_MARKET = 3
    """Яндекс маркет"""

    SBER_MARKET = 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 SalepointType(betterproto.Enum):
    """Справочник типов точек продаж"""

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

    TELE2 = 1
    """Теле2"""

    POCHTA_ROSSII = 2
    """Почта россии"""

    PEREKRESTOK = 3
    """Перекресток"""

    PYATEROCHKA = 4
    """Пятерочка"""

    ANOTHER = 5
    """Другая"""

    MEGAFON = 6
    """Мегафон"""

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

        return core_schema.int_schema(ge=0)


class SalepointWorktimeDayType(betterproto.Enum):
    """Справочник дней"""

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

    MONDAY = 1
    """Понедельник"""

    TUESDAY = 2
    """Вторник"""

    WEDNESDAY = 3
    """Среда"""

    THURSDAY = 4
    """Четверг"""

    FRIDAY = 5
    """Пятница"""

    SATURDAY = 6
    """Суббота"""

    SUNDAY = 7
    """Воскресенье"""

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

        return core_schema.int_schema(ge=0)


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

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

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

    DISTANCE = 2
    """По дистанции"""

    RANK_CD = 3
    """
    По рангу близости.
     При поиске по тексту
    """

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

        return core_schema.int_schema(ge=0)


class SalepointPagingDirectionType(betterproto.Enum):
    """Справочник типов направлений сортировки"""

    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 Marketplace(betterproto.Message):
    """Маркетплейс"""

    id: int = betterproto.int32_field(1)
    """Идентификатор"""

    title: str = betterproto.string_field(2)
    """Название"""

    type: "MarketplaceType" = betterproto.enum_field(3)
    """Тип маркетплейса"""

    is_disabled: bool = betterproto.bool_field(4)
    """Выключен ли маркетплейс"""

    card_url: "str | None" = betterproto.message_field(5, wraps=betterproto.TYPE_STRING)
    """Ссылка на карточку товара ключа в маркетплейсе"""

    created_at: datetime = betterproto.message_field(6)
    """Дата создания"""

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


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PostMarketplaceRequest(betterproto.Message):
    """Запрос сохранения маркетплейса"""

    data: "Marketplace" = betterproto.message_field(1)
    """Маркетплейс"""


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

    data: "Marketplace | 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 GetMarketplaceRequest(betterproto.Message):
    """Запрос получения маркетплейса"""

    id: int = betterproto.int32_field(1)
    """Идентификатор маркетплейса"""


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

    data: "Marketplace | 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 GetMarketplaceListRequest(betterproto.Message):
    """Запрос получения списка маркетплейсов"""

    pass


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

    data: "Marketplace | 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 GetMarketplaceCountRequest(betterproto.Message):
    """Запрос получения количества маркетплейсов"""

    pass


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

    data: "int | None" = betterproto.int32_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 Salepoint(betterproto.Message):
    """Точка продаж"""

    id: int = betterproto.int32_field(1)
    """Идентификатор"""

    title: str = betterproto.string_field(2)
    """Название"""

    type: "SalepointType" = betterproto.enum_field(3)
    """Тип точки продаж"""

    description: "str | None" = betterproto.message_field(
        4, wraps=betterproto.TYPE_STRING
    )
    """Описание"""

    address: str = betterproto.string_field(5)
    """Адрес"""

    location: "SalepointLocation" = betterproto.message_field(6)
    """Местонахождение"""

    worktimes: "list[SalepointWorktime]" = betterproto.message_field(7)
    """Рабочее время"""

    phone_number: "str | None" = betterproto.message_field(
        8, wraps=betterproto.TYPE_STRING
    )
    """Номер телефона"""

    site_url: str = betterproto.string_field(9)
    """Ссылка на сайт"""

    created_at: datetime = betterproto.message_field(10)
    """Дата создания"""

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

    archieved_at: datetime = betterproto.message_field(12)
    """Дата архивации"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class SalepointLocation(betterproto.Message):
    """Местонахождение"""

    latitude: float = betterproto.float_field(1)
    """Широта"""

    longitude: float = betterproto.float_field(2)
    """Долгота"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class SalepointWorktime(betterproto.Message):
    """Рабочее время"""

    day_type: "SalepointWorktimeDayType" = betterproto.enum_field(1)
    """День недели"""

    opened_at: str = betterproto.string_field(2)
    """Время открытия"""

    closed_at: str = betterproto.string_field(3)
    """Время закрытия"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class SalepointFilter(betterproto.Message):
    """Фильтр точек продаж"""

    text: "str | None" = betterproto.message_field(1, wraps=betterproto.TYPE_STRING)
    """
    По тексту.
     Если значение не передано то поиск по нему не производится.
     # Поиск производится по полям:
     # - Название
    """

    location: "SalepointFilterLocation" = betterproto.message_field(2)
    """
    По местонахождению.
     Игнорируется если дистанция не передана
    """

    distance: "float | None" = betterproto.message_field(
        3, wraps=betterproto.TYPE_FLOAT
    )
    """
    По дистанции.
     Игнорируется если местонахождение не передано
    """

    is_archieved: "bool | None" = betterproto.message_field(
        4, wraps=betterproto.TYPE_BOOL
    )
    """По архивированым"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class SalepointFilterLocation(betterproto.Message):
    """Местонахождение"""

    latitude: float = betterproto.float_field(1)
    """По широте"""

    longitude: float = betterproto.float_field(2)
    """По долготе"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class SalepointPaging(betterproto.Message):
    """Пагинация по точекам продаж"""

    order_by_type: "SalepointPagingOrderByType" = betterproto.enum_field(1)
    """
    Тип значения сортировки.
     По умолчанию: ORDER_BY_TYPE_ID
    """

    direction_type: "SalepointPagingDirectionType" = betterproto.enum_field(2)
    """
    Тип направления сортировки.
     По умолчанию: DESC
    """

    limit: int = betterproto.int32_field(3)
    """
    Количество записей на страницу.
     Минимальное значение: 1.
     Максимальное значение: 100.
     По умолчанию: 20.
     Если значение 0 (не передано), то выставляем значение по умолчанию
    """

    offset: int = betterproto.int32_field(4)
    """
    Сдвиг.
     По умолчанию: 0
    """


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

    data: "Salepoint" = betterproto.message_field(1)
    """Точка продаж"""


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

    data: "Salepoint | 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 GetSalepointRequest(betterproto.Message):
    """Запрос получения точки продаж"""

    id: int = betterproto.int32_field(1)
    """Идентификатор точки продаж"""


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

    data: "Salepoint | 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 GetSalepointListRequest(betterproto.Message):
    """Запрос получения списка точек продаж"""

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

    paging: "SalepointPaging | 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 GetSalepointListResponse(betterproto.Message):
    """Ответ на запрос получения списка точек продаж"""

    data: "Salepoint | 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 GetSalepointCountRequest(betterproto.Message):
    """Запрос получения количества точек продаж"""

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


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

    data: "int | None" = betterproto.int32_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 MarketplaceServiceStub(betterproto.ServiceStub):
    async def post_marketplace(
        self,
        post_marketplace_request: "PostMarketplaceRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "PostMarketplaceResponse":
        return await self._unary_unary(
            "/keyapis.ad.v1.MarketplaceService/PostMarketplace",
            post_marketplace_request,
            PostMarketplaceResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_marketplace(
        self,
        get_marketplace_request: "GetMarketplaceRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "GetMarketplaceResponse":
        return await self._unary_unary(
            "/keyapis.ad.v1.MarketplaceService/GetMarketplace",
            get_marketplace_request,
            GetMarketplaceResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_marketplace_list(
        self,
        get_marketplace_list_request: "GetMarketplaceListRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "AsyncIterator[GetMarketplaceListResponse]":
        async for response in self._unary_stream(
            "/keyapis.ad.v1.MarketplaceService/GetMarketplaceList",
            get_marketplace_list_request,
            GetMarketplaceListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        ):
            yield response

    async def get_marketplace_count(
        self,
        get_marketplace_count_request: "GetMarketplaceCountRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "GetMarketplaceCountResponse":
        return await self._unary_unary(
            "/keyapis.ad.v1.MarketplaceService/GetMarketplaceCount",
            get_marketplace_count_request,
            GetMarketplaceCountResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class SalepointServiceStub(betterproto.ServiceStub):
    async def post_salepoint(
        self,
        post_salepoint_request: "PostSalepointRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "PostSalepointResponse":
        return await self._unary_unary(
            "/keyapis.ad.v1.SalepointService/PostSalepoint",
            post_salepoint_request,
            PostSalepointResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_salepoint(
        self,
        get_salepoint_request: "GetSalepointRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "GetSalepointResponse":
        return await self._unary_unary(
            "/keyapis.ad.v1.SalepointService/GetSalepoint",
            get_salepoint_request,
            GetSalepointResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_salepoint_list(
        self,
        get_salepoint_list_request: "GetSalepointListRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "AsyncIterator[GetSalepointListResponse]":
        async for response in self._unary_stream(
            "/keyapis.ad.v1.SalepointService/GetSalepointList",
            get_salepoint_list_request,
            GetSalepointListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        ):
            yield response

    async def get_salepoint_count(
        self,
        get_salepoint_count_request: "GetSalepointCountRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "GetSalepointCountResponse":
        return await self._unary_unary(
            "/keyapis.ad.v1.SalepointService/GetSalepointCount",
            get_salepoint_count_request,
            GetSalepointCountResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


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.ad.v1.SystemService/GetSystemStatus",
            get_system_status_request,
            GetSystemStatusResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class MarketplaceServiceBase(ServiceBase):

    async def post_marketplace(
        self, post_marketplace_request: "PostMarketplaceRequest"
    ) -> "PostMarketplaceResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_marketplace(
        self, get_marketplace_request: "GetMarketplaceRequest"
    ) -> "GetMarketplaceResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_marketplace_list(
        self, get_marketplace_list_request: "GetMarketplaceListRequest"
    ) -> "AsyncIterator[GetMarketplaceListResponse]":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)
        yield GetMarketplaceListResponse()

    async def get_marketplace_count(
        self, get_marketplace_count_request: "GetMarketplaceCountRequest"
    ) -> "GetMarketplaceCountResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_post_marketplace(
        self,
        stream: "grpclib.server.Stream[PostMarketplaceRequest, PostMarketplaceResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_marketplace(request)
        await stream.send_message(response)

    async def __rpc_get_marketplace(
        self,
        stream: "grpclib.server.Stream[GetMarketplaceRequest, GetMarketplaceResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_marketplace(request)
        await stream.send_message(response)

    async def __rpc_get_marketplace_list(
        self,
        stream: "grpclib.server.Stream[GetMarketplaceListRequest, GetMarketplaceListResponse]",
    ) -> None:
        request = await stream.recv_message()
        await self._call_rpc_handler_server_stream(
            self.get_marketplace_list,
            stream,
            request,
        )

    async def __rpc_get_marketplace_count(
        self,
        stream: "grpclib.server.Stream[GetMarketplaceCountRequest, GetMarketplaceCountResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_marketplace_count(request)
        await stream.send_message(response)

    def __mapping__(self) -> "dict[str, grpclib.const.Handler]":
        return {
            "/keyapis.ad.v1.MarketplaceService/PostMarketplace": grpclib.const.Handler(
                self.__rpc_post_marketplace,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostMarketplaceRequest,
                PostMarketplaceResponse,
            ),
            "/keyapis.ad.v1.MarketplaceService/GetMarketplace": grpclib.const.Handler(
                self.__rpc_get_marketplace,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetMarketplaceRequest,
                GetMarketplaceResponse,
            ),
            "/keyapis.ad.v1.MarketplaceService/GetMarketplaceList": grpclib.const.Handler(
                self.__rpc_get_marketplace_list,
                grpclib.const.Cardinality.UNARY_STREAM,
                GetMarketplaceListRequest,
                GetMarketplaceListResponse,
            ),
            "/keyapis.ad.v1.MarketplaceService/GetMarketplaceCount": grpclib.const.Handler(
                self.__rpc_get_marketplace_count,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetMarketplaceCountRequest,
                GetMarketplaceCountResponse,
            ),
        }


class SalepointServiceBase(ServiceBase):

    async def post_salepoint(
        self, post_salepoint_request: "PostSalepointRequest"
    ) -> "PostSalepointResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_salepoint(
        self, get_salepoint_request: "GetSalepointRequest"
    ) -> "GetSalepointResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_salepoint_list(
        self, get_salepoint_list_request: "GetSalepointListRequest"
    ) -> "AsyncIterator[GetSalepointListResponse]":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)
        yield GetSalepointListResponse()

    async def get_salepoint_count(
        self, get_salepoint_count_request: "GetSalepointCountRequest"
    ) -> "GetSalepointCountResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_post_salepoint(
        self,
        stream: "grpclib.server.Stream[PostSalepointRequest, PostSalepointResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_salepoint(request)
        await stream.send_message(response)

    async def __rpc_get_salepoint(
        self, stream: "grpclib.server.Stream[GetSalepointRequest, GetSalepointResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_salepoint(request)
        await stream.send_message(response)

    async def __rpc_get_salepoint_list(
        self,
        stream: "grpclib.server.Stream[GetSalepointListRequest, GetSalepointListResponse]",
    ) -> None:
        request = await stream.recv_message()
        await self._call_rpc_handler_server_stream(
            self.get_salepoint_list,
            stream,
            request,
        )

    async def __rpc_get_salepoint_count(
        self,
        stream: "grpclib.server.Stream[GetSalepointCountRequest, GetSalepointCountResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_salepoint_count(request)
        await stream.send_message(response)

    def __mapping__(self) -> "dict[str, grpclib.const.Handler]":
        return {
            "/keyapis.ad.v1.SalepointService/PostSalepoint": grpclib.const.Handler(
                self.__rpc_post_salepoint,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostSalepointRequest,
                PostSalepointResponse,
            ),
            "/keyapis.ad.v1.SalepointService/GetSalepoint": grpclib.const.Handler(
                self.__rpc_get_salepoint,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetSalepointRequest,
                GetSalepointResponse,
            ),
            "/keyapis.ad.v1.SalepointService/GetSalepointList": grpclib.const.Handler(
                self.__rpc_get_salepoint_list,
                grpclib.const.Cardinality.UNARY_STREAM,
                GetSalepointListRequest,
                GetSalepointListResponse,
            ),
            "/keyapis.ad.v1.SalepointService/GetSalepointCount": grpclib.const.Handler(
                self.__rpc_get_salepoint_count,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetSalepointCountRequest,
                GetSalepointCountResponse,
            ),
        }


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


rebuild_dataclass(Marketplace)  # type: ignore
rebuild_dataclass(PostMarketplaceRequest)  # type: ignore
rebuild_dataclass(PostMarketplaceResponse)  # type: ignore
rebuild_dataclass(GetMarketplaceResponse)  # type: ignore
rebuild_dataclass(GetMarketplaceListResponse)  # type: ignore
rebuild_dataclass(Salepoint)  # type: ignore
rebuild_dataclass(SalepointWorktime)  # type: ignore
rebuild_dataclass(SalepointFilter)  # type: ignore
rebuild_dataclass(SalepointPaging)  # type: ignore
rebuild_dataclass(PostSalepointRequest)  # type: ignore
rebuild_dataclass(PostSalepointResponse)  # type: ignore
rebuild_dataclass(GetSalepointResponse)  # type: ignore
rebuild_dataclass(GetSalepointListRequest)  # type: ignore
rebuild_dataclass(GetSalepointListResponse)  # type: ignore
rebuild_dataclass(GetSalepointCountRequest)  # type: ignore
