#[derive(Clone, Copy, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct Position(u32);
impl Position {
pub const ZERO: Self = Self(0);
#[must_use]
pub const fn new(offset: u32) -> Self {
Self(offset)
}
#[must_use]
pub const fn get(self) -> u32 {
self.0
}
}
impl From<u32> for Position {
fn from(offset: u32) -> Self {
Self::new(offset)
}
}
impl From<Position> for u32 {
fn from(position: Position) -> Self {
position.get()
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct FileInfo<'a> {
pub name: &'a [u8],
pub size: Option<Position>,
}
impl<'a> FileInfo<'a> {
#[must_use]
pub const fn new(name: &'a [u8], size: Option<Position>) -> Self {
Self { name, size }
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[non_exhaustive]
pub enum Action<'a> {
WriteWire(&'a [u8]),
ReadFile { offset: Position, max_len: usize },
WriteFile(&'a [u8]),
Event(Event<'a>),
Idle,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[non_exhaustive]
pub enum Event<'a> {
FileStarted(FileInfo<'a>),
FileCompleted,
SessionCompleted,
Aborted,
}