use core::error::Error;
use common_traits::*;
pub trait Word: UnsignedInt + ToBytes + FromBytes + FiniteRangeNumber {}
impl<W: UnsignedInt + ToBytes + FromBytes + FiniteRangeNumber> Word for W {}
pub trait WordRead {
type Error: Error + Send + Sync + 'static;
type Word: Word;
fn read_word(&mut self) -> Result<Self::Word, Self::Error>;
}
pub trait WordWrite {
type Error: Error + Send + Sync + 'static;
type Word: Word;
fn write_word(&mut self, word: Self::Word) -> Result<(), Self::Error>;
fn flush(&mut self) -> Result<(), Self::Error>;
}
pub trait WordSeek {
type Error: Error + Send + Sync + 'static;
fn word_pos(&mut self) -> Result<u64, Self::Error>;
fn set_word_pos(&mut self, word_pos: u64) -> Result<(), Self::Error>;
}
#[derive(Debug, Clone, PartialEq)]
pub enum WordError {
UnexpectedEof { word_pos: usize },
}
impl core::error::Error for WordError {}
impl core::fmt::Display for WordError {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
WordError::UnexpectedEof { word_pos } => {
write!(f, "Unexpected end of data at word position {}", word_pos)
}
}
}
}