from abc import ABC, abstractmethod


class IMultiselectCommunicator(ABC):
    """Communicator helper class that ensures both the client and multistream
    module will follow the same multistream protocol, which is necessary for
    them to work."""

    @abstractmethod
    async def write(self, msg_str: str) -> None:
        """
        Write message to stream.

        :param msg_str: message to write
        """

    @abstractmethod
    async def read(self) -> str:
        """Reads message from stream until EOF."""