"""
@generated by mypy-protobuf.  Do not edit manually!
isort:skip_file
Copyright 2022 Lekko Technologies, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
"""
import abc
import collections.abc
import grpc
import grpc.aio
import lekko_client.gen.lekko.client.v1beta1.configuration_service_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
    ...

class ConfigurationServiceStub:
    """Initial implementation of a feature flagging service."""

    def __init__(self, channel: typing.Union[grpc.Channel, grpc.aio.Channel]) -> None: ...
    GetBoolValue: grpc.UnaryUnaryMultiCallable[
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetBoolValueRequest,
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetBoolValueResponse,
    ]
    GetIntValue: grpc.UnaryUnaryMultiCallable[
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetIntValueRequest,
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetIntValueResponse,
    ]
    GetFloatValue: grpc.UnaryUnaryMultiCallable[
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetFloatValueRequest,
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetFloatValueResponse,
    ]
    GetStringValue: grpc.UnaryUnaryMultiCallable[
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetStringValueRequest,
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetStringValueResponse,
    ]
    GetProtoValue: grpc.UnaryUnaryMultiCallable[
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetProtoValueRequest,
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetProtoValueResponse,
    ]
    GetJSONValue: grpc.UnaryUnaryMultiCallable[
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetJSONValueRequest,
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetJSONValueResponse,
    ]
    Register: grpc.UnaryUnaryMultiCallable[
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.RegisterRequest,
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.RegisterResponse,
    ]
    """Register is used to denote a RepositoryKey and namespaces within it
    that a client is interested in so the server can cache and keep up to date.
    """
    Deregister: grpc.UnaryUnaryMultiCallable[
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.DeregisterRequest,
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.DeregisterResponse,
    ]
    """Deregister is used to tell the server that a client is shutting down. It is not
    required but preferable to have implementations call this once their lifecycle
    has completed.
    """

class ConfigurationServiceAsyncStub:
    """Initial implementation of a feature flagging service."""

    GetBoolValue: grpc.aio.UnaryUnaryMultiCallable[
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetBoolValueRequest,
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetBoolValueResponse,
    ]
    GetIntValue: grpc.aio.UnaryUnaryMultiCallable[
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetIntValueRequest,
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetIntValueResponse,
    ]
    GetFloatValue: grpc.aio.UnaryUnaryMultiCallable[
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetFloatValueRequest,
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetFloatValueResponse,
    ]
    GetStringValue: grpc.aio.UnaryUnaryMultiCallable[
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetStringValueRequest,
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetStringValueResponse,
    ]
    GetProtoValue: grpc.aio.UnaryUnaryMultiCallable[
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetProtoValueRequest,
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetProtoValueResponse,
    ]
    GetJSONValue: grpc.aio.UnaryUnaryMultiCallable[
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetJSONValueRequest,
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetJSONValueResponse,
    ]
    Register: grpc.aio.UnaryUnaryMultiCallable[
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.RegisterRequest,
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.RegisterResponse,
    ]
    """Register is used to denote a RepositoryKey and namespaces within it
    that a client is interested in so the server can cache and keep up to date.
    """
    Deregister: grpc.aio.UnaryUnaryMultiCallable[
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.DeregisterRequest,
        lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.DeregisterResponse,
    ]
    """Deregister is used to tell the server that a client is shutting down. It is not
    required but preferable to have implementations call this once their lifecycle
    has completed.
    """

class ConfigurationServiceServicer(metaclass=abc.ABCMeta):
    """Initial implementation of a feature flagging service."""

    @abc.abstractmethod
    def GetBoolValue(
        self,
        request: lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetBoolValueRequest,
        context: _ServicerContext,
    ) -> typing.Union[lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetBoolValueResponse, collections.abc.Awaitable[lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetBoolValueResponse]]: ...
    @abc.abstractmethod
    def GetIntValue(
        self,
        request: lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetIntValueRequest,
        context: _ServicerContext,
    ) -> typing.Union[lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetIntValueResponse, collections.abc.Awaitable[lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetIntValueResponse]]: ...
    @abc.abstractmethod
    def GetFloatValue(
        self,
        request: lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetFloatValueRequest,
        context: _ServicerContext,
    ) -> typing.Union[lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetFloatValueResponse, collections.abc.Awaitable[lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetFloatValueResponse]]: ...
    @abc.abstractmethod
    def GetStringValue(
        self,
        request: lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetStringValueRequest,
        context: _ServicerContext,
    ) -> typing.Union[lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetStringValueResponse, collections.abc.Awaitable[lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetStringValueResponse]]: ...
    @abc.abstractmethod
    def GetProtoValue(
        self,
        request: lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetProtoValueRequest,
        context: _ServicerContext,
    ) -> typing.Union[lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetProtoValueResponse, collections.abc.Awaitable[lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetProtoValueResponse]]: ...
    @abc.abstractmethod
    def GetJSONValue(
        self,
        request: lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetJSONValueRequest,
        context: _ServicerContext,
    ) -> typing.Union[lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetJSONValueResponse, collections.abc.Awaitable[lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.GetJSONValueResponse]]: ...
    @abc.abstractmethod
    def Register(
        self,
        request: lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.RegisterRequest,
        context: _ServicerContext,
    ) -> typing.Union[lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.RegisterResponse, collections.abc.Awaitable[lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.RegisterResponse]]:
        """Register is used to denote a RepositoryKey and namespaces within it
        that a client is interested in so the server can cache and keep up to date.
        """
    @abc.abstractmethod
    def Deregister(
        self,
        request: lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.DeregisterRequest,
        context: _ServicerContext,
    ) -> typing.Union[lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.DeregisterResponse, collections.abc.Awaitable[lekko_client.gen.lekko.client.v1beta1.configuration_service_pb2.DeregisterResponse]]:
        """Deregister is used to tell the server that a client is shutting down. It is not
        required but preferable to have implementations call this once their lifecycle
        has completed.
        """

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