"""
@generated by mypy-protobuf.  Do not edit manually!
isort:skip_file
"""
import abc
import flwr.proto.fab_pb2
import flwr.proto.fleet_pb2
import flwr.proto.heartbeat_pb2
import flwr.proto.message_pb2
import flwr.proto.run_pb2
import grpc

class FleetStub:
    def __init__(self, channel: grpc.Channel) -> None: ...
    CreateNode: grpc.UnaryUnaryMultiCallable[
        flwr.proto.fleet_pb2.CreateNodeRequest,
        flwr.proto.fleet_pb2.CreateNodeResponse]

    DeleteNode: grpc.UnaryUnaryMultiCallable[
        flwr.proto.fleet_pb2.DeleteNodeRequest,
        flwr.proto.fleet_pb2.DeleteNodeResponse]

    SendNodeHeartbeat: grpc.UnaryUnaryMultiCallable[
        flwr.proto.heartbeat_pb2.SendNodeHeartbeatRequest,
        flwr.proto.heartbeat_pb2.SendNodeHeartbeatResponse]

    PullMessages: grpc.UnaryUnaryMultiCallable[
        flwr.proto.fleet_pb2.PullMessagesRequest,
        flwr.proto.fleet_pb2.PullMessagesResponse]
    """Retrieve one or more messages, if possible

    HTTP API path: /api/v1/fleet/pull-messages
    """

    PushMessages: grpc.UnaryUnaryMultiCallable[
        flwr.proto.fleet_pb2.PushMessagesRequest,
        flwr.proto.fleet_pb2.PushMessagesResponse]
    """Complete one or more messages, if possible

    HTTP API path: /api/v1/fleet/push-messages
    """

    GetRun: grpc.UnaryUnaryMultiCallable[
        flwr.proto.run_pb2.GetRunRequest,
        flwr.proto.run_pb2.GetRunResponse]

    GetFab: grpc.UnaryUnaryMultiCallable[
        flwr.proto.fab_pb2.GetFabRequest,
        flwr.proto.fab_pb2.GetFabResponse]
    """Get FAB"""

    PushObject: grpc.UnaryUnaryMultiCallable[
        flwr.proto.message_pb2.PushObjectRequest,
        flwr.proto.message_pb2.PushObjectResponse]
    """Push Object"""

    PullObject: grpc.UnaryUnaryMultiCallable[
        flwr.proto.message_pb2.PullObjectRequest,
        flwr.proto.message_pb2.PullObjectResponse]
    """Pull Object"""

    ConfirmMessageReceived: grpc.UnaryUnaryMultiCallable[
        flwr.proto.message_pb2.ConfirmMessageReceivedRequest,
        flwr.proto.message_pb2.ConfirmMessageReceivedResponse]
    """Confirm Message Received"""


class FleetServicer(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def CreateNode(self,
        request: flwr.proto.fleet_pb2.CreateNodeRequest,
        context: grpc.ServicerContext,
    ) -> flwr.proto.fleet_pb2.CreateNodeResponse: ...

    @abc.abstractmethod
    def DeleteNode(self,
        request: flwr.proto.fleet_pb2.DeleteNodeRequest,
        context: grpc.ServicerContext,
    ) -> flwr.proto.fleet_pb2.DeleteNodeResponse: ...

    @abc.abstractmethod
    def SendNodeHeartbeat(self,
        request: flwr.proto.heartbeat_pb2.SendNodeHeartbeatRequest,
        context: grpc.ServicerContext,
    ) -> flwr.proto.heartbeat_pb2.SendNodeHeartbeatResponse: ...

    @abc.abstractmethod
    def PullMessages(self,
        request: flwr.proto.fleet_pb2.PullMessagesRequest,
        context: grpc.ServicerContext,
    ) -> flwr.proto.fleet_pb2.PullMessagesResponse:
        """Retrieve one or more messages, if possible

        HTTP API path: /api/v1/fleet/pull-messages
        """
        pass

    @abc.abstractmethod
    def PushMessages(self,
        request: flwr.proto.fleet_pb2.PushMessagesRequest,
        context: grpc.ServicerContext,
    ) -> flwr.proto.fleet_pb2.PushMessagesResponse:
        """Complete one or more messages, if possible

        HTTP API path: /api/v1/fleet/push-messages
        """
        pass

    @abc.abstractmethod
    def GetRun(self,
        request: flwr.proto.run_pb2.GetRunRequest,
        context: grpc.ServicerContext,
    ) -> flwr.proto.run_pb2.GetRunResponse: ...

    @abc.abstractmethod
    def GetFab(self,
        request: flwr.proto.fab_pb2.GetFabRequest,
        context: grpc.ServicerContext,
    ) -> flwr.proto.fab_pb2.GetFabResponse:
        """Get FAB"""
        pass

    @abc.abstractmethod
    def PushObject(self,
        request: flwr.proto.message_pb2.PushObjectRequest,
        context: grpc.ServicerContext,
    ) -> flwr.proto.message_pb2.PushObjectResponse:
        """Push Object"""
        pass

    @abc.abstractmethod
    def PullObject(self,
        request: flwr.proto.message_pb2.PullObjectRequest,
        context: grpc.ServicerContext,
    ) -> flwr.proto.message_pb2.PullObjectResponse:
        """Pull Object"""
        pass

    @abc.abstractmethod
    def ConfirmMessageReceived(self,
        request: flwr.proto.message_pb2.ConfirmMessageReceivedRequest,
        context: grpc.ServicerContext,
    ) -> flwr.proto.message_pb2.ConfirmMessageReceivedResponse:
        """Confirm Message Received"""
        pass


def add_FleetServicer_to_server(servicer: FleetServicer, server: grpc.Server) -> None: ...
