use std::fmt;
pub type Result<T> = std::result::Result<T, ReqError>;
#[derive(Debug, Clone, PartialEq)]
pub enum ReqError {
EmptySketch,
InvalidK(u16),
InvalidRank(f64),
IncompatibleSketches(String),
CacheInvalid,
InvalidSplitPoints(String),
UnsupportedOperation(String),
#[cfg(feature = "serde")]
SerializationError(String),
}
impl fmt::Display for ReqError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
ReqError::EmptySketch => write!(f, "Cannot perform operation on empty sketch"),
ReqError::InvalidK(k) => write!(f, "Invalid k parameter: {}. Must be even and >= 4", k),
ReqError::InvalidRank(rank) => {
write!(f, "Invalid rank: {}. Must be in range [0.0, 1.0]", rank)
}
ReqError::IncompatibleSketches(msg) => write!(f, "Incompatible sketches: {}", msg),
ReqError::CacheInvalid => write!(f, "Internal cache is invalid"),
ReqError::InvalidSplitPoints(msg) => write!(f, "Invalid split points: {}", msg),
ReqError::UnsupportedOperation(msg) => write!(f, "Unsupported operation: {}", msg),
#[cfg(feature = "serde")]
ReqError::SerializationError(msg) => write!(f, "Serialization error: {}", msg),
}
}
}
impl std::error::Error for ReqError {}