use std::fmt;
#[derive(Debug)]
pub enum LercError {
InvalidArgument,
LercStatus(LercStatus),
UnknownStatus(u32),
}
impl fmt::Display for LercError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::InvalidArgument => write!(
f,
"Invalid argument: mismatched dimensions or null pointers"
),
Self::LercStatus(status) => write!(f, "LERC C API error: {status}"),
Self::UnknownStatus(code) => {
write!(f, "Unknown LERC status code returned: {code}")
}
}
}
}
impl std::error::Error for LercError {}
#[derive(Debug)]
pub enum LercStatus {
Failed,
WrongParam,
BufferTooSmall,
NaN,
HasNoData,
}
impl LercError {
#[must_use]
pub const fn from_status(code: u32) -> Self {
match code {
1 => Self::LercStatus(LercStatus::Failed),
2 => Self::LercStatus(LercStatus::WrongParam),
3 => Self::LercStatus(LercStatus::BufferTooSmall),
4 => Self::LercStatus(LercStatus::NaN),
5 => Self::LercStatus(LercStatus::HasNoData),
_ => Self::UnknownStatus(code),
}
}
}
impl fmt::Display for LercStatus {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let msg = match self {
Self::Failed => "Operation failed",
Self::WrongParam => "Invalid parameter",
Self::BufferTooSmall => "Buffer too small",
Self::NaN => "Input data contains NaN values",
Self::HasNoData => "Blob contains only no-data values",
};
write!(f, "{msg}")
}
}