#[derive(Debug, thiserror::Error)]
pub enum NambError {
#[error("file truncated: got {got} bytes, need at least {need}")]
Truncated {
got: usize,
need: usize,
},
#[error("invalid magic number: 0x{0:08X} (expected 0x4E414D42)")]
InvalidMagic(u32),
#[error("unsupported .namb version: {0}")]
InvalidVersion(u16),
#[error("weights offset {offset} out of file bounds (file size: {file_len})")]
WeightsOffsetOutOfBounds {
offset: usize,
file_len: usize,
},
#[error("invalid weights offset {offset} (smaller than header size {header_size})")]
InvalidWeightsOffset {
offset: usize,
header_size: usize,
},
#[error("CRC32 mismatch: got 0x{got:08X}, expected 0x{expected:08X}")]
CrcMismatch {
got: u32,
expected: u32,
},
#[error("CRC32 flag missing in NAMB v{version} file (FLAG_HAS_CRC32 not set)")]
CrcMissing {
version: u16,
},
#[error("weight section too large: {got} floats, maximum {max}")]
WeightsTooLarge {
got: usize,
max: usize,
},
#[error("weight at index {index} is not finite (value: {value:e})")]
NonFiniteWeight {
index: usize,
value: f32,
},
#[error("invalid header field '{field}': {value:e} ({reason})")]
InvalidHeaderField {
field: &'static str,
value: f32,
reason: &'static str,
},
}