use std::{error::Error, fmt};
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum LoadError {
BadMagic,
UnsupportedVersion,
Truncated,
LengthMismatch {
expected: usize,
actual: usize,
},
InvalidNodeSize {
node_size: usize,
},
IntegerOverflow,
InvalidTree,
}
impl fmt::Display for LoadError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
LoadError::BadMagic => write!(f, "buffer is not a packed_spatial_index index"),
LoadError::UnsupportedVersion => write!(f, "unsupported packed_spatial_index format"),
LoadError::Truncated => write!(f, "buffer is truncated"),
LoadError::LengthMismatch { expected, actual } => write!(
f,
"buffer length mismatch (expected {expected} bytes, got {actual})"
),
LoadError::InvalidNodeSize { node_size } => {
write!(f, "invalid node size in buffer ({node_size})")
}
LoadError::IntegerOverflow => write!(f, "buffer integer value is too large"),
LoadError::InvalidTree => write!(f, "buffer does not contain a valid packed tree"),
}
}
}
impl Error for LoadError {}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum PayloadError {
CountMismatch {
expected: usize,
got: usize,
},
TooLarge,
RecordSizeMismatch {
stride: usize,
got: usize,
},
}
impl fmt::Display for PayloadError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
PayloadError::CountMismatch { expected, got } => write!(
f,
"payload count {got} does not match item count {expected}"
),
PayloadError::TooLarge => write!(f, "combined payload size is too large to serialize"),
PayloadError::RecordSizeMismatch { stride, got } => write!(
f,
"fixed-width record length {got} does not match stride {stride}"
),
}
}
}
impl Error for PayloadError {}