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

import abc
import collections.abc
import grpc
import grpc.aio
import sift.calculated_channels.v2.calculated_channels_pb2
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 CalculatedChannelServiceStub:
    def __init__(self, channel: typing.Union[grpc.Channel, grpc.aio.Channel]) -> None: ...
    GetCalculatedChannel: grpc.UnaryUnaryMultiCallable[
        sift.calculated_channels.v2.calculated_channels_pb2.GetCalculatedChannelRequest,
        sift.calculated_channels.v2.calculated_channels_pb2.GetCalculatedChannelResponse,
    ]
    """Retrieve the latest version of a calculated channel"""

    CreateCalculatedChannel: grpc.UnaryUnaryMultiCallable[
        sift.calculated_channels.v2.calculated_channels_pb2.CreateCalculatedChannelRequest,
        sift.calculated_channels.v2.calculated_channels_pb2.CreateCalculatedChannelResponse,
    ]
    """Create a calculated channel."""

    ListCalculatedChannels: grpc.UnaryUnaryMultiCallable[
        sift.calculated_channels.v2.calculated_channels_pb2.ListCalculatedChannelsRequest,
        sift.calculated_channels.v2.calculated_channels_pb2.ListCalculatedChannelsResponse,
    ]
    """Retrieve the latest versions of calculated channels based on an optional filter."""

    UpdateCalculatedChannel: grpc.UnaryUnaryMultiCallable[
        sift.calculated_channels.v2.calculated_channels_pb2.UpdateCalculatedChannelRequest,
        sift.calculated_channels.v2.calculated_channels_pb2.UpdateCalculatedChannelResponse,
    ]
    """Update and create a new version of a calculated channel."""

    ListCalculatedChannelVersions: grpc.UnaryUnaryMultiCallable[
        sift.calculated_channels.v2.calculated_channels_pb2.ListCalculatedChannelVersionsRequest,
        sift.calculated_channels.v2.calculated_channels_pb2.ListCalculatedChannelVersionsResponse,
    ]
    """List versions of a particular calculated channel with an optional filter."""

    ResolveCalculatedChannel: grpc.UnaryUnaryMultiCallable[
        sift.calculated_channels.v2.calculated_channels_pb2.ResolveCalculatedChannelRequest,
        sift.calculated_channels.v2.calculated_channels_pb2.ResolveCalculatedChannelResponse,
    ]
    """Resolve a calculated channel into an expression with references."""

    BatchResolveCalculatedChannels: grpc.UnaryUnaryMultiCallable[
        sift.calculated_channels.v2.calculated_channels_pb2.BatchResolveCalculatedChannelsRequest,
        sift.calculated_channels.v2.calculated_channels_pb2.BatchResolveCalculatedChannelsResponse,
    ]
    """Resolve a batch of calculated channels into expressions with references."""

    ListResolvedCalculatedChannels: grpc.UnaryUnaryMultiCallable[
        sift.calculated_channels.v2.calculated_channels_pb2.ListResolvedCalculatedChannelsRequest,
        sift.calculated_channels.v2.calculated_channels_pb2.ListResolvedCalculatedChannelsResponse,
    ]
    """Retrieve the latest versions of calculated channels based on an optional filter."""

class CalculatedChannelServiceAsyncStub:
    GetCalculatedChannel: grpc.aio.UnaryUnaryMultiCallable[
        sift.calculated_channels.v2.calculated_channels_pb2.GetCalculatedChannelRequest,
        sift.calculated_channels.v2.calculated_channels_pb2.GetCalculatedChannelResponse,
    ]
    """Retrieve the latest version of a calculated channel"""

    CreateCalculatedChannel: grpc.aio.UnaryUnaryMultiCallable[
        sift.calculated_channels.v2.calculated_channels_pb2.CreateCalculatedChannelRequest,
        sift.calculated_channels.v2.calculated_channels_pb2.CreateCalculatedChannelResponse,
    ]
    """Create a calculated channel."""

    ListCalculatedChannels: grpc.aio.UnaryUnaryMultiCallable[
        sift.calculated_channels.v2.calculated_channels_pb2.ListCalculatedChannelsRequest,
        sift.calculated_channels.v2.calculated_channels_pb2.ListCalculatedChannelsResponse,
    ]
    """Retrieve the latest versions of calculated channels based on an optional filter."""

    UpdateCalculatedChannel: grpc.aio.UnaryUnaryMultiCallable[
        sift.calculated_channels.v2.calculated_channels_pb2.UpdateCalculatedChannelRequest,
        sift.calculated_channels.v2.calculated_channels_pb2.UpdateCalculatedChannelResponse,
    ]
    """Update and create a new version of a calculated channel."""

    ListCalculatedChannelVersions: grpc.aio.UnaryUnaryMultiCallable[
        sift.calculated_channels.v2.calculated_channels_pb2.ListCalculatedChannelVersionsRequest,
        sift.calculated_channels.v2.calculated_channels_pb2.ListCalculatedChannelVersionsResponse,
    ]
    """List versions of a particular calculated channel with an optional filter."""

    ResolveCalculatedChannel: grpc.aio.UnaryUnaryMultiCallable[
        sift.calculated_channels.v2.calculated_channels_pb2.ResolveCalculatedChannelRequest,
        sift.calculated_channels.v2.calculated_channels_pb2.ResolveCalculatedChannelResponse,
    ]
    """Resolve a calculated channel into an expression with references."""

    BatchResolveCalculatedChannels: grpc.aio.UnaryUnaryMultiCallable[
        sift.calculated_channels.v2.calculated_channels_pb2.BatchResolveCalculatedChannelsRequest,
        sift.calculated_channels.v2.calculated_channels_pb2.BatchResolveCalculatedChannelsResponse,
    ]
    """Resolve a batch of calculated channels into expressions with references."""

    ListResolvedCalculatedChannels: grpc.aio.UnaryUnaryMultiCallable[
        sift.calculated_channels.v2.calculated_channels_pb2.ListResolvedCalculatedChannelsRequest,
        sift.calculated_channels.v2.calculated_channels_pb2.ListResolvedCalculatedChannelsResponse,
    ]
    """Retrieve the latest versions of calculated channels based on an optional filter."""

class CalculatedChannelServiceServicer(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def GetCalculatedChannel(
        self,
        request: sift.calculated_channels.v2.calculated_channels_pb2.GetCalculatedChannelRequest,
        context: _ServicerContext,
    ) -> typing.Union[sift.calculated_channels.v2.calculated_channels_pb2.GetCalculatedChannelResponse, collections.abc.Awaitable[sift.calculated_channels.v2.calculated_channels_pb2.GetCalculatedChannelResponse]]:
        """Retrieve the latest version of a calculated channel"""

    @abc.abstractmethod
    def CreateCalculatedChannel(
        self,
        request: sift.calculated_channels.v2.calculated_channels_pb2.CreateCalculatedChannelRequest,
        context: _ServicerContext,
    ) -> typing.Union[sift.calculated_channels.v2.calculated_channels_pb2.CreateCalculatedChannelResponse, collections.abc.Awaitable[sift.calculated_channels.v2.calculated_channels_pb2.CreateCalculatedChannelResponse]]:
        """Create a calculated channel."""

    @abc.abstractmethod
    def ListCalculatedChannels(
        self,
        request: sift.calculated_channels.v2.calculated_channels_pb2.ListCalculatedChannelsRequest,
        context: _ServicerContext,
    ) -> typing.Union[sift.calculated_channels.v2.calculated_channels_pb2.ListCalculatedChannelsResponse, collections.abc.Awaitable[sift.calculated_channels.v2.calculated_channels_pb2.ListCalculatedChannelsResponse]]:
        """Retrieve the latest versions of calculated channels based on an optional filter."""

    @abc.abstractmethod
    def UpdateCalculatedChannel(
        self,
        request: sift.calculated_channels.v2.calculated_channels_pb2.UpdateCalculatedChannelRequest,
        context: _ServicerContext,
    ) -> typing.Union[sift.calculated_channels.v2.calculated_channels_pb2.UpdateCalculatedChannelResponse, collections.abc.Awaitable[sift.calculated_channels.v2.calculated_channels_pb2.UpdateCalculatedChannelResponse]]:
        """Update and create a new version of a calculated channel."""

    @abc.abstractmethod
    def ListCalculatedChannelVersions(
        self,
        request: sift.calculated_channels.v2.calculated_channels_pb2.ListCalculatedChannelVersionsRequest,
        context: _ServicerContext,
    ) -> typing.Union[sift.calculated_channels.v2.calculated_channels_pb2.ListCalculatedChannelVersionsResponse, collections.abc.Awaitable[sift.calculated_channels.v2.calculated_channels_pb2.ListCalculatedChannelVersionsResponse]]:
        """List versions of a particular calculated channel with an optional filter."""

    @abc.abstractmethod
    def ResolveCalculatedChannel(
        self,
        request: sift.calculated_channels.v2.calculated_channels_pb2.ResolveCalculatedChannelRequest,
        context: _ServicerContext,
    ) -> typing.Union[sift.calculated_channels.v2.calculated_channels_pb2.ResolveCalculatedChannelResponse, collections.abc.Awaitable[sift.calculated_channels.v2.calculated_channels_pb2.ResolveCalculatedChannelResponse]]:
        """Resolve a calculated channel into an expression with references."""

    @abc.abstractmethod
    def BatchResolveCalculatedChannels(
        self,
        request: sift.calculated_channels.v2.calculated_channels_pb2.BatchResolveCalculatedChannelsRequest,
        context: _ServicerContext,
    ) -> typing.Union[sift.calculated_channels.v2.calculated_channels_pb2.BatchResolveCalculatedChannelsResponse, collections.abc.Awaitable[sift.calculated_channels.v2.calculated_channels_pb2.BatchResolveCalculatedChannelsResponse]]:
        """Resolve a batch of calculated channels into expressions with references."""

    @abc.abstractmethod
    def ListResolvedCalculatedChannels(
        self,
        request: sift.calculated_channels.v2.calculated_channels_pb2.ListResolvedCalculatedChannelsRequest,
        context: _ServicerContext,
    ) -> typing.Union[sift.calculated_channels.v2.calculated_channels_pb2.ListResolvedCalculatedChannelsResponse, collections.abc.Awaitable[sift.calculated_channels.v2.calculated_channels_pb2.ListResolvedCalculatedChannelsResponse]]:
        """Retrieve the latest versions of calculated channels based on an optional filter."""

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