xio_common 0.12.0

XIO commonly used functionality
Documentation
use crate::base::ErrorCode;
use snafu::ResultExt;
use std::io::{Read, Write};
use crate::{
    error, Endian, ReadExt, Result, TryFrom, WithFixedPayloadLength,
    WriteExt,
};

impl WithFixedPayloadLength for ErrorCode {
    const FIXED_PAYLOAD_LENGTH: u16 = u16::FIXED_PAYLOAD_LENGTH;
}

pub(crate) trait ErrorCodeWriterExt: Write {
    fn write_error_code(&mut self, error_code: ErrorCode) -> Result<()> {
        self.write_u16::<Endian>(error_code as u16)
    }
}

impl<B: Write + ?Sized> ErrorCodeWriterExt for B {}

pub(crate) trait ErrorCodeReaderExt: Read {
    fn read_error_code(&mut self) -> Result<ErrorCode> {
        let value = self.read_u16::<Endian>()?;
        ErrorCode::try_from(value).context(error::Io)
    }
}

impl<B: Read + ?Sized> ErrorCodeReaderExt for B {}