<gh_stars>0
from abc import ABC, abstractmethod


class INetStream(ABC):

    @abstractmethod
    def get_protocol(self):
        """
        :return: protocol id that stream runs on
        """

    @abstractmethod
    def set_protocol(self, protocol_id):
        """
        :param protocol_id: protocol id that stream runs on
        :return: true if successful
        """

    @abstractmethod
    def read(self):
        """
        reads from the underlying muxed_stream
        :return: bytes of input
        """

    @abstractmethod
    def write(self, _bytes):
        """
        write to the underlying muxed_stream
        :return: number of bytes written
        """

    @abstractmethod
    def close(self):
        """
        close the underlying muxed stream
        :return: true if successful
        """

from abc import ABC, abstractmethod


class INetStream(ABC):

    @abstractmethod
    def get_protocol(self):
        """
        :return: protocol id that stream runs on
        """

    @abstractmethod
    def set_protocol(self, protocol_id):
        """
        :param protocol_id: protocol id that stream runs on
        :return: true if successful
        """

    @abstractmethod
    def read(self):
        """
        reads from the underlying muxed_stream
        :return: bytes of input
        """

    @abstractmethod
    def write(self, _bytes):
        """
        write to the underlying muxed_stream
        :return: number of bytes written
        """

    @abstractmethod
    def close(self):
        """
        close the underlying muxed stream
        :return: true if successful
        """
:return: protocol id that stream runs on :param protocol_id: protocol id that stream runs on         :return: true if successful reads from the underlying muxed_stream         :return: bytes of input write to the underlying muxed_stream         :return: number of bytes written close the underlying muxed stream         :return: true if successful