use serde::{Deserialize, Serialize};
use tsify::Tsify;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Tsify)]
#[tsify(into_wasm_abi, from_wasm_abi)]
pub enum ZeckFormatError {
HeaderTooShort {
actual_length: usize,
required_length: usize,
},
UnsupportedVersion {
found_version: u8,
supported_version: u8,
},
ReservedFlagsSet {
flags: u8,
},
CompressionFailed {
original_size: usize,
be_size: usize,
le_size: usize,
},
DecompressedTooLarge {
expected_size: usize,
actual_size: usize,
},
DataSizeTooLarge {
size: usize,
},
}
impl std::fmt::Display for ZeckFormatError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
ZeckFormatError::HeaderTooShort {
actual_length,
required_length,
} => {
write!(
f,
"Header too short: got {} bytes, need at least {} bytes",
actual_length, required_length
)
}
ZeckFormatError::UnsupportedVersion {
found_version,
supported_version,
} => {
write!(
f,
"Unsupported file format version: found {}, maximum supported is {}",
found_version, supported_version
)
}
ZeckFormatError::ReservedFlagsSet { flags } => {
write!(
f,
"Reserved flags are set in header (flags: 0x{:02x}), indicating a newer format version",
flags
)
}
ZeckFormatError::CompressionFailed {
original_size,
be_size,
le_size,
} => {
write!(
f,
"Compression failed: original size {} bytes, big endian compressed size {} bytes, little endian compressed size {} bytes",
original_size, be_size, le_size
)
}
ZeckFormatError::DecompressedTooLarge {
expected_size,
actual_size,
} => {
write!(
f,
"Decompressed data is too large: expected {} bytes, got {} bytes",
expected_size, actual_size
)
}
ZeckFormatError::DataSizeTooLarge { size } => {
write!(
f,
"Data size {} bytes is too large to be represented in the file format header",
size
)
}
}
}
}
impl std::error::Error for ZeckFormatError {}