use thiserror::Error;
#[derive(Debug, Error)]
pub enum NousError {
#[error("evaluator '{name}' failed: {message}")]
EvaluatorFailed { name: String, message: String },
#[error("registry error: {0}")]
Registry(String),
#[error("serde error: {0}")]
Serde(#[from] serde_json::Error),
#[error("score out of range: {value} (expected 0.0..=1.0)")]
ScoreOutOfRange { value: f64 },
}
pub type NousResult<T> = Result<T, NousError>;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn error_display_evaluator_failed() {
let err = NousError::EvaluatorFailed {
name: "token_efficiency".into(),
message: "division by zero".into(),
};
assert!(err.to_string().contains("token_efficiency"));
assert!(err.to_string().contains("division by zero"));
}
#[test]
fn error_display_score_out_of_range() {
let err = NousError::ScoreOutOfRange { value: 1.5 };
assert!(err.to_string().contains("1.5"));
}
}