use thiserror::Error;
pub type Result<T> = std::result::Result<T, DriftError>;
#[derive(Debug, Error)]
pub enum DriftError {
#[error("empty input: {0}")]
EmptyInput(String),
#[error("invalid bin count: {0}")]
InvalidBinCount(usize),
#[error("input contained a non-finite value at index {index}")]
NonFinite {
index: usize,
},
#[error("histogram length mismatch: reference has {reference} bins, live has {live}")]
BinCountMismatch {
reference: usize,
live: usize,
},
#[error("unknown feature: {0}")]
UnknownFeature(String),
#[error("sample too small: {kind} needs at least {minimum} samples, got {actual}")]
SampleTooSmall {
kind: &'static str,
minimum: usize,
actual: usize,
},
#[error("zero-width range: all reference values are identical ({value}); cannot form continuous bins")]
ZeroWidthRange {
value: f64,
},
#[error("invalid configuration: {0}")]
InvalidConfig(String),
}