"""
@generated by mypy-protobuf.  Do not edit manually!
isort:skip_file
*
DEPRECATED; use flagd.evaluation.v1
Flag evaluation API

This proto forms the basis of a flag-evaluation API.
It supports single and bulk evaluation RPCs, and flags of various types, as well as establishing a stream for getting notifications about changes in a flag definition.
It supports the inclusion of a "context" with each evaluation, which may contain arbitrary attributes relevant to flag evaluation.
"""

import abc
import collections.abc
import grpc
import grpc.aio
import openfeature.schemas.protobuf.schema.v1.schema_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 ServiceStub:
    """Service defines the exposed rpcs of flagd"""

    def __init__(self, channel: typing.Union[grpc.Channel, grpc.aio.Channel]) -> None: ...
    ResolveAll: grpc.UnaryUnaryMultiCallable[
        openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveAllRequest,
        openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveAllResponse,
    ]

    ResolveBoolean: grpc.UnaryUnaryMultiCallable[
        openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveBooleanRequest,
        openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveBooleanResponse,
    ]

    ResolveString: grpc.UnaryUnaryMultiCallable[
        openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveStringRequest,
        openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveStringResponse,
    ]

    ResolveFloat: grpc.UnaryUnaryMultiCallable[
        openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveFloatRequest,
        openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveFloatResponse,
    ]

    ResolveInt: grpc.UnaryUnaryMultiCallable[
        openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveIntRequest,
        openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveIntResponse,
    ]

    ResolveObject: grpc.UnaryUnaryMultiCallable[
        openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveObjectRequest,
        openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveObjectResponse,
    ]

    EventStream: grpc.UnaryStreamMultiCallable[
        openfeature.schemas.protobuf.schema.v1.schema_pb2.EventStreamRequest,
        openfeature.schemas.protobuf.schema.v1.schema_pb2.EventStreamResponse,
    ]

class ServiceAsyncStub:
    """Service defines the exposed rpcs of flagd"""

    ResolveAll: grpc.aio.UnaryUnaryMultiCallable[
        openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveAllRequest,
        openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveAllResponse,
    ]

    ResolveBoolean: grpc.aio.UnaryUnaryMultiCallable[
        openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveBooleanRequest,
        openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveBooleanResponse,
    ]

    ResolveString: grpc.aio.UnaryUnaryMultiCallable[
        openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveStringRequest,
        openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveStringResponse,
    ]

    ResolveFloat: grpc.aio.UnaryUnaryMultiCallable[
        openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveFloatRequest,
        openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveFloatResponse,
    ]

    ResolveInt: grpc.aio.UnaryUnaryMultiCallable[
        openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveIntRequest,
        openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveIntResponse,
    ]

    ResolveObject: grpc.aio.UnaryUnaryMultiCallable[
        openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveObjectRequest,
        openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveObjectResponse,
    ]

    EventStream: grpc.aio.UnaryStreamMultiCallable[
        openfeature.schemas.protobuf.schema.v1.schema_pb2.EventStreamRequest,
        openfeature.schemas.protobuf.schema.v1.schema_pb2.EventStreamResponse,
    ]

class ServiceServicer(metaclass=abc.ABCMeta):
    """Service defines the exposed rpcs of flagd"""

    @abc.abstractmethod
    def ResolveAll(
        self,
        request: openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveAllRequest,
        context: _ServicerContext,
    ) -> typing.Union[openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveAllResponse, collections.abc.Awaitable[openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveAllResponse]]: ...

    @abc.abstractmethod
    def ResolveBoolean(
        self,
        request: openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveBooleanRequest,
        context: _ServicerContext,
    ) -> typing.Union[openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveBooleanResponse, collections.abc.Awaitable[openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveBooleanResponse]]: ...

    @abc.abstractmethod
    def ResolveString(
        self,
        request: openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveStringRequest,
        context: _ServicerContext,
    ) -> typing.Union[openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveStringResponse, collections.abc.Awaitable[openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveStringResponse]]: ...

    @abc.abstractmethod
    def ResolveFloat(
        self,
        request: openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveFloatRequest,
        context: _ServicerContext,
    ) -> typing.Union[openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveFloatResponse, collections.abc.Awaitable[openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveFloatResponse]]: ...

    @abc.abstractmethod
    def ResolveInt(
        self,
        request: openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveIntRequest,
        context: _ServicerContext,
    ) -> typing.Union[openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveIntResponse, collections.abc.Awaitable[openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveIntResponse]]: ...

    @abc.abstractmethod
    def ResolveObject(
        self,
        request: openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveObjectRequest,
        context: _ServicerContext,
    ) -> typing.Union[openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveObjectResponse, collections.abc.Awaitable[openfeature.schemas.protobuf.schema.v1.schema_pb2.ResolveObjectResponse]]: ...

    @abc.abstractmethod
    def EventStream(
        self,
        request: openfeature.schemas.protobuf.schema.v1.schema_pb2.EventStreamRequest,
        context: _ServicerContext,
    ) -> typing.Union[collections.abc.Iterator[openfeature.schemas.protobuf.schema.v1.schema_pb2.EventStreamResponse], collections.abc.AsyncIterator[openfeature.schemas.protobuf.schema.v1.schema_pb2.EventStreamResponse]]: ...

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