Documentation
use {
    super::errors::ProtocolControlMessageReaderError,
    crate::messages::define::SetPeerBandwidthProperties, byteorder::BigEndian,
    bytesio::bytes_reader::BytesReader,
};

pub struct ProtocolControlMessageReader {
    pub reader: BytesReader,
}

impl ProtocolControlMessageReader {
    pub fn new(reader: BytesReader) -> Self {
        Self { reader }
    }
    pub fn read_set_chunk_size(&mut self) -> Result<u32, ProtocolControlMessageReaderError> {
        let chunk_size = self.reader.read_u32::<BigEndian>()?;
        Ok(chunk_size)
    }

    pub fn read_abort_message(&mut self) -> Result<u32, ProtocolControlMessageReaderError> {
        let chunk_stream_id = self.reader.read_u32::<BigEndian>()?;
        Ok(chunk_stream_id)
    }

    pub fn read_acknowledgement(&mut self) -> Result<u32, ProtocolControlMessageReaderError> {
        let sequence_number = self.reader.read_u32::<BigEndian>()?;
        Ok(sequence_number)
    }

    pub fn read_window_acknowledgement_size(
        &mut self,
    ) -> Result<u32, ProtocolControlMessageReaderError> {
        let window_acknowledgement_size = self.reader.read_u32::<BigEndian>()?;
        Ok(window_acknowledgement_size)
    }

    pub fn read_set_peer_bandwidth(
        &mut self,
    ) -> Result<SetPeerBandwidthProperties, ProtocolControlMessageReaderError> {
        let window_size = self.reader.read_u32::<BigEndian>()?;
        let limit_type = self.reader.read_u8()?;

        Ok(SetPeerBandwidthProperties::new(window_size, limit_type))
    }
}