use core::fmt;
use kinavis_kernel::KernelError;
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq)]
pub enum AisError {
BadArmouring {
offset: usize,
},
BadFill {
fill_bits: u8,
payload_bits: usize,
},
TooLong {
bits: usize,
limit: usize,
},
TooShort {
bits: usize,
needed: usize,
},
UnexpectedFragment {
expected: u8,
found: u8,
},
NoSlot,
Value {
field: &'static str,
error: KernelError,
},
}
impl fmt::Display for AisError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::BadArmouring { offset } => {
write!(f, "payload character at offset {offset} is not armoured")
}
Self::BadFill {
fill_bits,
payload_bits,
} => write!(
f,
"{fill_bits} fill bits claimed of a payload of {payload_bits} bits"
),
Self::TooLong { bits, limit } => {
write!(f, "message of {bits} bits exceeds the limit of {limit}")
}
Self::TooShort { bits, needed } => {
write!(f, "message of {bits} bits where {needed} are needed")
}
Self::UnexpectedFragment { expected, found } => {
write!(f, "fragment {found} where fragment {expected} was expected")
}
Self::NoSlot => f.write_str("the assembler has no slot for a message in fragments"),
Self::Value { field, error } => write!(f, "{field}: {error}"),
}
}
}
impl core::error::Error for AisError {}