"""
@generated by mypy-protobuf.  Do not edit manually!
isort:skip_file
"""

import abc
import collections.abc
import dmcb.grpc.core_pb2
import grpc
import grpc.aio
import typing

_T = typing.TypeVar("_T")

class _MaybeAsyncIterator(collections.abc.AsyncIterator[_T], collections.abc.Iterator[_T], metaclass=abc.ABCMeta): ...

class _ServicerContext(grpc.ServicerContext, grpc.aio.ServicerContext):  # type: ignore[misc, type-arg]
    ...

class BasketControllerStub:
    def __init__(self, channel: typing.Union[grpc.Channel, grpc.aio.Channel]) -> None: ...
    AddItem: grpc.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.AddItemRequest,
        dmcb.grpc.core_pb2.Response,
    ]

    ApplyDiscount: grpc.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.BasketApplyDiscountRequest,
        dmcb.grpc.core_pb2.Response,
    ]

    AssignOwner: grpc.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.BasketAssignOwnerRequest,
        dmcb.grpc.core_pb2.Response,
    ]

    Create: grpc.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.BasketCreateRequest,
        dmcb.grpc.core_pb2.Response,
    ]

    RemoveItem: grpc.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.RemoveItemRequest,
        dmcb.grpc.core_pb2.Response,
    ]

    Retrieve: grpc.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.BasketRetrieveRequest,
        dmcb.grpc.core_pb2.Response,
    ]

class BasketControllerAsyncStub:
    AddItem: grpc.aio.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.AddItemRequest,
        dmcb.grpc.core_pb2.Response,
    ]

    ApplyDiscount: grpc.aio.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.BasketApplyDiscountRequest,
        dmcb.grpc.core_pb2.Response,
    ]

    AssignOwner: grpc.aio.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.BasketAssignOwnerRequest,
        dmcb.grpc.core_pb2.Response,
    ]

    Create: grpc.aio.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.BasketCreateRequest,
        dmcb.grpc.core_pb2.Response,
    ]

    RemoveItem: grpc.aio.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.RemoveItemRequest,
        dmcb.grpc.core_pb2.Response,
    ]

    Retrieve: grpc.aio.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.BasketRetrieveRequest,
        dmcb.grpc.core_pb2.Response,
    ]

class BasketControllerServicer(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def AddItem(
        self,
        request: dmcb.grpc.core_pb2.AddItemRequest,
        context: _ServicerContext,
    ) -> typing.Union[dmcb.grpc.core_pb2.Response, collections.abc.Awaitable[dmcb.grpc.core_pb2.Response]]: ...

    @abc.abstractmethod
    def ApplyDiscount(
        self,
        request: dmcb.grpc.core_pb2.BasketApplyDiscountRequest,
        context: _ServicerContext,
    ) -> typing.Union[dmcb.grpc.core_pb2.Response, collections.abc.Awaitable[dmcb.grpc.core_pb2.Response]]: ...

    @abc.abstractmethod
    def AssignOwner(
        self,
        request: dmcb.grpc.core_pb2.BasketAssignOwnerRequest,
        context: _ServicerContext,
    ) -> typing.Union[dmcb.grpc.core_pb2.Response, collections.abc.Awaitable[dmcb.grpc.core_pb2.Response]]: ...

    @abc.abstractmethod
    def Create(
        self,
        request: dmcb.grpc.core_pb2.BasketCreateRequest,
        context: _ServicerContext,
    ) -> typing.Union[dmcb.grpc.core_pb2.Response, collections.abc.Awaitable[dmcb.grpc.core_pb2.Response]]: ...

    @abc.abstractmethod
    def RemoveItem(
        self,
        request: dmcb.grpc.core_pb2.RemoveItemRequest,
        context: _ServicerContext,
    ) -> typing.Union[dmcb.grpc.core_pb2.Response, collections.abc.Awaitable[dmcb.grpc.core_pb2.Response]]: ...

    @abc.abstractmethod
    def Retrieve(
        self,
        request: dmcb.grpc.core_pb2.BasketRetrieveRequest,
        context: _ServicerContext,
    ) -> typing.Union[dmcb.grpc.core_pb2.Response, collections.abc.Awaitable[dmcb.grpc.core_pb2.Response]]: ...

def add_BasketControllerServicer_to_server(servicer: BasketControllerServicer, server: typing.Union[grpc.Server, grpc.aio.Server]) -> None: ...

class InstallmentControllerStub:
    def __init__(self, channel: typing.Union[grpc.Channel, grpc.aio.Channel]) -> None: ...
    List: grpc.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.InstallmentRequest,
        dmcb.grpc.core_pb2.Response,
    ]

    RetrieveTerm: grpc.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.InstallmentTermRequest,
        dmcb.grpc.core_pb2.Response,
    ]

class InstallmentControllerAsyncStub:
    List: grpc.aio.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.InstallmentRequest,
        dmcb.grpc.core_pb2.Response,
    ]

    RetrieveTerm: grpc.aio.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.InstallmentTermRequest,
        dmcb.grpc.core_pb2.Response,
    ]

class InstallmentControllerServicer(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def List(
        self,
        request: dmcb.grpc.core_pb2.InstallmentRequest,
        context: _ServicerContext,
    ) -> typing.Union[dmcb.grpc.core_pb2.Response, collections.abc.Awaitable[dmcb.grpc.core_pb2.Response]]: ...

    @abc.abstractmethod
    def RetrieveTerm(
        self,
        request: dmcb.grpc.core_pb2.InstallmentTermRequest,
        context: _ServicerContext,
    ) -> typing.Union[dmcb.grpc.core_pb2.Response, collections.abc.Awaitable[dmcb.grpc.core_pb2.Response]]: ...

def add_InstallmentControllerServicer_to_server(servicer: InstallmentControllerServicer, server: typing.Union[grpc.Server, grpc.aio.Server]) -> None: ...

class TradeControllerStub:
    def __init__(self, channel: typing.Union[grpc.Channel, grpc.aio.Channel]) -> None: ...
    EndBasketTrade: grpc.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.EndTradeRequest,
        dmcb.grpc.core_pb2.Response,
    ]

    EndInstallmentTrade: grpc.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.EndTradeRequest,
        dmcb.grpc.core_pb2.Response,
    ]

    EndWalletTrade: grpc.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.EndTradeRequest,
        dmcb.grpc.core_pb2.Response,
    ]

    StartBasketTrade: grpc.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.BasketTradeRequest,
        dmcb.grpc.core_pb2.Response,
    ]

    StartInstallmentTrade: grpc.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.InstallmentTradeRequest,
        dmcb.grpc.core_pb2.Response,
    ]

    StartWalletTrade: grpc.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.WalletTradeRequest,
        dmcb.grpc.core_pb2.Response,
    ]

class TradeControllerAsyncStub:
    EndBasketTrade: grpc.aio.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.EndTradeRequest,
        dmcb.grpc.core_pb2.Response,
    ]

    EndInstallmentTrade: grpc.aio.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.EndTradeRequest,
        dmcb.grpc.core_pb2.Response,
    ]

    EndWalletTrade: grpc.aio.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.EndTradeRequest,
        dmcb.grpc.core_pb2.Response,
    ]

    StartBasketTrade: grpc.aio.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.BasketTradeRequest,
        dmcb.grpc.core_pb2.Response,
    ]

    StartInstallmentTrade: grpc.aio.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.InstallmentTradeRequest,
        dmcb.grpc.core_pb2.Response,
    ]

    StartWalletTrade: grpc.aio.UnaryUnaryMultiCallable[
        dmcb.grpc.core_pb2.WalletTradeRequest,
        dmcb.grpc.core_pb2.Response,
    ]

class TradeControllerServicer(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def EndBasketTrade(
        self,
        request: dmcb.grpc.core_pb2.EndTradeRequest,
        context: _ServicerContext,
    ) -> typing.Union[dmcb.grpc.core_pb2.Response, collections.abc.Awaitable[dmcb.grpc.core_pb2.Response]]: ...

    @abc.abstractmethod
    def EndInstallmentTrade(
        self,
        request: dmcb.grpc.core_pb2.EndTradeRequest,
        context: _ServicerContext,
    ) -> typing.Union[dmcb.grpc.core_pb2.Response, collections.abc.Awaitable[dmcb.grpc.core_pb2.Response]]: ...

    @abc.abstractmethod
    def EndWalletTrade(
        self,
        request: dmcb.grpc.core_pb2.EndTradeRequest,
        context: _ServicerContext,
    ) -> typing.Union[dmcb.grpc.core_pb2.Response, collections.abc.Awaitable[dmcb.grpc.core_pb2.Response]]: ...

    @abc.abstractmethod
    def StartBasketTrade(
        self,
        request: dmcb.grpc.core_pb2.BasketTradeRequest,
        context: _ServicerContext,
    ) -> typing.Union[dmcb.grpc.core_pb2.Response, collections.abc.Awaitable[dmcb.grpc.core_pb2.Response]]: ...

    @abc.abstractmethod
    def StartInstallmentTrade(
        self,
        request: dmcb.grpc.core_pb2.InstallmentTradeRequest,
        context: _ServicerContext,
    ) -> typing.Union[dmcb.grpc.core_pb2.Response, collections.abc.Awaitable[dmcb.grpc.core_pb2.Response]]: ...

    @abc.abstractmethod
    def StartWalletTrade(
        self,
        request: dmcb.grpc.core_pb2.WalletTradeRequest,
        context: _ServicerContext,
    ) -> typing.Union[dmcb.grpc.core_pb2.Response, collections.abc.Awaitable[dmcb.grpc.core_pb2.Response]]: ...

def add_TradeControllerServicer_to_server(servicer: TradeControllerServicer, server: typing.Union[grpc.Server, grpc.aio.Server]) -> None: ...
