use std::fmt::{Display, Formatter};
#[derive(Debug)]
pub enum BiolepticError {
InvalidCompressionMethod([u8; 4]),
InvalidMagic([u8; 4]),
InvalidDataType([u8; 2]),
InvalidVersion([u8; 2]),
UnderlyingDwtError(String),
UnderlyingCompressorError(String),
OutOfMemoryError(usize),
InvalidHeader,
UnsupportedCompressorConfiguration(String),
DecompressionError(String),
InvalidQuantizationScale(u8),
}
impl Display for BiolepticError {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
match self {
BiolepticError::InvalidCompressionMethod(v) => {
let s = std::str::from_utf8(v).unwrap_or("????");
f.write_fmt(format_args!("Invalid compression method '{}'", s))
}
BiolepticError::InvalidMagic(v) => {
let s = std::str::from_utf8(v).unwrap_or("????");
f.write_fmt(format_args!("Magic should be 'BILP' but it was '{}'", s))
}
BiolepticError::InvalidDataType(v) => {
let s = std::str::from_utf8(v).unwrap_or("??");
f.write_fmt(format_args!("Invalid compression method '{}'", s))
}
BiolepticError::InvalidVersion(v) => {
let s = std::str::from_utf8(v).unwrap_or("??");
f.write_fmt(format_args!("Invalid header version '{}'", s))
}
BiolepticError::OutOfMemoryError(s) => f.write_fmt(format_args!(
"Out of memory, can't allocate additional {}",
s
)),
BiolepticError::UnderlyingDwtError(e) => f.write_fmt(format_args!("{}", e)),
BiolepticError::InvalidHeader => f.write_str("Header is invalid"),
BiolepticError::UnderlyingCompressorError(e) => f.write_fmt(format_args!("{}", e)),
BiolepticError::UnsupportedCompressorConfiguration(s) => f.write_fmt(format_args!(
"Unsupported compression configuration '{}'",
s
)),
BiolepticError::DecompressionError(s) => {
f.write_fmt(format_args!("Can't decompress data, reason: {}", s))
}
BiolepticError::InvalidQuantizationScale(s) => f.write_fmt(format_args!(
"Only scaled 6..12 is supported, but it was {s}"
)),
}
}
}