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

import abc
import collections.abc
from . import common_pb2
import grpc
import grpc.aio
from . import pybridge_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 PyBridgeStub:
    def __init__(self, channel: typing.Union[grpc.Channel, grpc.aio.Channel]) -> None: ...
    Healthcheck: grpc.UnaryUnaryMultiCallable[
        common_pb2.StandardRequest,
        common_pb2.StandardReply,
    ]

    Close: grpc.UnaryUnaryMultiCallable[
        common_pb2.StandardRequest,
        common_pb2.StandardReply,
    ]

    IirFilterDesign: grpc.UnaryUnaryMultiCallable[
        pybridge_pb2.PyBridgeIirFilterDesignRequest,
        pybridge_pb2.PyBridgeIirFilterDesignReply,
    ]

    FileOpen: grpc.UnaryUnaryMultiCallable[
        pybridge_pb2.PyBridgeFileOpenRequest,
        common_pb2.StandardReply,
    ]

    FileGetStatus: grpc.UnaryUnaryMultiCallable[
        pybridge_pb2.PyBridgeFileStandardRequest,
        pybridge_pb2.PyBridgeGetStatusReply,
    ]

    FileGetSpec: grpc.UnaryUnaryMultiCallable[
        pybridge_pb2.PyBridgeFileStandardRequest,
        pybridge_pb2.PyBridgeGetSpecReply,
    ]

    FileGetSignals: grpc.UnaryUnaryMultiCallable[
        pybridge_pb2.PyBridgeGetSignalsRequest,
        pybridge_pb2.PyBridgeGetSignalsReply,
    ]

    SpikesPushToExportFile: grpc.UnaryUnaryMultiCallable[
        pybridge_pb2.SpikesPushToExportReq,
        common_pb2.StandardReply,
    ]

    LoadMearecOnPybridge: grpc.UnaryUnaryMultiCallable[
        pybridge_pb2.PyBridgeFileOpenRequest,
        pybridge_pb2.MearecFileMeta,
    ]

    SpikesSendMearecHDF5: grpc.UnaryStreamMultiCallable[
        pybridge_pb2.MearecWaveformStreamRequest,
        pybridge_pb2.MearecWaveformChunk,
    ]

    SpikesCloseMearecHDF5: grpc.UnaryUnaryMultiCallable[
        common_pb2.StandardRequest,
        common_pb2.StandardReply,
    ]

    GetMearecTemplate: grpc.UnaryUnaryMultiCallable[
        pybridge_pb2.MearecTemplateRequest,
        pybridge_pb2.MearecTemplate,
    ]

    GetMearecWaveforms: grpc.UnaryUnaryMultiCallable[
        pybridge_pb2.MearecWaveformRequest,
        pybridge_pb2.MearecWaveformChunk,
    ]

    GetMearecSignals: grpc.UnaryUnaryMultiCallable[
        pybridge_pb2.MearecSignalRequest,
        pybridge_pb2.MearecSignalReply,
    ]

    StreamingRequest: grpc.StreamUnaryMultiCallable[
        pybridge_pb2.Request,
        pybridge_pb2.Reply,
    ]
    """template functions"""

    StreamingReply: grpc.UnaryStreamMultiCallable[
        pybridge_pb2.Request,
        pybridge_pb2.Reply,
    ]

    StreamingBidirectional: grpc.StreamStreamMultiCallable[
        pybridge_pb2.Request,
        pybridge_pb2.Reply,
    ]

class PyBridgeAsyncStub:
    Healthcheck: grpc.aio.UnaryUnaryMultiCallable[
        common_pb2.StandardRequest,
        common_pb2.StandardReply,
    ]

    Close: grpc.aio.UnaryUnaryMultiCallable[
        common_pb2.StandardRequest,
        common_pb2.StandardReply,
    ]

    IirFilterDesign: grpc.aio.UnaryUnaryMultiCallable[
        pybridge_pb2.PyBridgeIirFilterDesignRequest,
        pybridge_pb2.PyBridgeIirFilterDesignReply,
    ]

    FileOpen: grpc.aio.UnaryUnaryMultiCallable[
        pybridge_pb2.PyBridgeFileOpenRequest,
        common_pb2.StandardReply,
    ]

    FileGetStatus: grpc.aio.UnaryUnaryMultiCallable[
        pybridge_pb2.PyBridgeFileStandardRequest,
        pybridge_pb2.PyBridgeGetStatusReply,
    ]

    FileGetSpec: grpc.aio.UnaryUnaryMultiCallable[
        pybridge_pb2.PyBridgeFileStandardRequest,
        pybridge_pb2.PyBridgeGetSpecReply,
    ]

    FileGetSignals: grpc.aio.UnaryUnaryMultiCallable[
        pybridge_pb2.PyBridgeGetSignalsRequest,
        pybridge_pb2.PyBridgeGetSignalsReply,
    ]

    SpikesPushToExportFile: grpc.aio.UnaryUnaryMultiCallable[
        pybridge_pb2.SpikesPushToExportReq,
        common_pb2.StandardReply,
    ]

    LoadMearecOnPybridge: grpc.aio.UnaryUnaryMultiCallable[
        pybridge_pb2.PyBridgeFileOpenRequest,
        pybridge_pb2.MearecFileMeta,
    ]

    SpikesSendMearecHDF5: grpc.aio.UnaryStreamMultiCallable[
        pybridge_pb2.MearecWaveformStreamRequest,
        pybridge_pb2.MearecWaveformChunk,
    ]

    SpikesCloseMearecHDF5: grpc.aio.UnaryUnaryMultiCallable[
        common_pb2.StandardRequest,
        common_pb2.StandardReply,
    ]

    GetMearecTemplate: grpc.aio.UnaryUnaryMultiCallable[
        pybridge_pb2.MearecTemplateRequest,
        pybridge_pb2.MearecTemplate,
    ]

    GetMearecWaveforms: grpc.aio.UnaryUnaryMultiCallable[
        pybridge_pb2.MearecWaveformRequest,
        pybridge_pb2.MearecWaveformChunk,
    ]

    GetMearecSignals: grpc.aio.UnaryUnaryMultiCallable[
        pybridge_pb2.MearecSignalRequest,
        pybridge_pb2.MearecSignalReply,
    ]

    StreamingRequest: grpc.aio.StreamUnaryMultiCallable[
        pybridge_pb2.Request,
        pybridge_pb2.Reply,
    ]
    """template functions"""

    StreamingReply: grpc.aio.UnaryStreamMultiCallable[
        pybridge_pb2.Request,
        pybridge_pb2.Reply,
    ]

    StreamingBidirectional: grpc.aio.StreamStreamMultiCallable[
        pybridge_pb2.Request,
        pybridge_pb2.Reply,
    ]

class PyBridgeServicer(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def Healthcheck(
        self,
        request: common_pb2.StandardRequest,
        context: _ServicerContext,
    ) -> typing.Union[common_pb2.StandardReply, collections.abc.Awaitable[common_pb2.StandardReply]]: ...

    @abc.abstractmethod
    def Close(
        self,
        request: common_pb2.StandardRequest,
        context: _ServicerContext,
    ) -> typing.Union[common_pb2.StandardReply, collections.abc.Awaitable[common_pb2.StandardReply]]: ...

    @abc.abstractmethod
    def IirFilterDesign(
        self,
        request: pybridge_pb2.PyBridgeIirFilterDesignRequest,
        context: _ServicerContext,
    ) -> typing.Union[pybridge_pb2.PyBridgeIirFilterDesignReply, collections.abc.Awaitable[pybridge_pb2.PyBridgeIirFilterDesignReply]]: ...

    @abc.abstractmethod
    def FileOpen(
        self,
        request: pybridge_pb2.PyBridgeFileOpenRequest,
        context: _ServicerContext,
    ) -> typing.Union[common_pb2.StandardReply, collections.abc.Awaitable[common_pb2.StandardReply]]: ...

    @abc.abstractmethod
    def FileGetStatus(
        self,
        request: pybridge_pb2.PyBridgeFileStandardRequest,
        context: _ServicerContext,
    ) -> typing.Union[pybridge_pb2.PyBridgeGetStatusReply, collections.abc.Awaitable[pybridge_pb2.PyBridgeGetStatusReply]]: ...

    @abc.abstractmethod
    def FileGetSpec(
        self,
        request: pybridge_pb2.PyBridgeFileStandardRequest,
        context: _ServicerContext,
    ) -> typing.Union[pybridge_pb2.PyBridgeGetSpecReply, collections.abc.Awaitable[pybridge_pb2.PyBridgeGetSpecReply]]: ...

    @abc.abstractmethod
    def FileGetSignals(
        self,
        request: pybridge_pb2.PyBridgeGetSignalsRequest,
        context: _ServicerContext,
    ) -> typing.Union[pybridge_pb2.PyBridgeGetSignalsReply, collections.abc.Awaitable[pybridge_pb2.PyBridgeGetSignalsReply]]: ...

    @abc.abstractmethod
    def SpikesPushToExportFile(
        self,
        request: pybridge_pb2.SpikesPushToExportReq,
        context: _ServicerContext,
    ) -> typing.Union[common_pb2.StandardReply, collections.abc.Awaitable[common_pb2.StandardReply]]: ...

    @abc.abstractmethod
    def LoadMearecOnPybridge(
        self,
        request: pybridge_pb2.PyBridgeFileOpenRequest,
        context: _ServicerContext,
    ) -> typing.Union[pybridge_pb2.MearecFileMeta, collections.abc.Awaitable[pybridge_pb2.MearecFileMeta]]: ...

    @abc.abstractmethod
    def SpikesSendMearecHDF5(
        self,
        request: pybridge_pb2.MearecWaveformStreamRequest,
        context: _ServicerContext,
    ) -> typing.Union[collections.abc.Iterator[pybridge_pb2.MearecWaveformChunk], collections.abc.AsyncIterator[pybridge_pb2.MearecWaveformChunk]]: ...

    @abc.abstractmethod
    def SpikesCloseMearecHDF5(
        self,
        request: common_pb2.StandardRequest,
        context: _ServicerContext,
    ) -> typing.Union[common_pb2.StandardReply, collections.abc.Awaitable[common_pb2.StandardReply]]: ...

    @abc.abstractmethod
    def GetMearecTemplate(
        self,
        request: pybridge_pb2.MearecTemplateRequest,
        context: _ServicerContext,
    ) -> typing.Union[pybridge_pb2.MearecTemplate, collections.abc.Awaitable[pybridge_pb2.MearecTemplate]]: ...

    @abc.abstractmethod
    def GetMearecWaveforms(
        self,
        request: pybridge_pb2.MearecWaveformRequest,
        context: _ServicerContext,
    ) -> typing.Union[pybridge_pb2.MearecWaveformChunk, collections.abc.Awaitable[pybridge_pb2.MearecWaveformChunk]]: ...

    @abc.abstractmethod
    def GetMearecSignals(
        self,
        request: pybridge_pb2.MearecSignalRequest,
        context: _ServicerContext,
    ) -> typing.Union[pybridge_pb2.MearecSignalReply, collections.abc.Awaitable[pybridge_pb2.MearecSignalReply]]: ...

    @abc.abstractmethod
    def StreamingRequest(
        self,
        request_iterator: _MaybeAsyncIterator[pybridge_pb2.Request],
        context: _ServicerContext,
    ) -> typing.Union[pybridge_pb2.Reply, collections.abc.Awaitable[pybridge_pb2.Reply]]:
        """template functions"""

    @abc.abstractmethod
    def StreamingReply(
        self,
        request: pybridge_pb2.Request,
        context: _ServicerContext,
    ) -> typing.Union[collections.abc.Iterator[pybridge_pb2.Reply], collections.abc.AsyncIterator[pybridge_pb2.Reply]]: ...

    @abc.abstractmethod
    def StreamingBidirectional(
        self,
        request_iterator: _MaybeAsyncIterator[pybridge_pb2.Request],
        context: _ServicerContext,
    ) -> typing.Union[collections.abc.Iterator[pybridge_pb2.Reply], collections.abc.AsyncIterator[pybridge_pb2.Reply]]: ...

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