1use thiserror::Error;
4
5#[derive(Debug, Error)]
7pub enum NousError {
8 #[error("evaluator '{name}' failed: {message}")]
10 EvaluatorFailed { name: String, message: String },
11
12 #[error("registry error: {0}")]
14 Registry(String),
15
16 #[error("serde error: {0}")]
18 Serde(#[from] serde_json::Error),
19
20 #[error("score out of range: {value} (expected 0.0..=1.0)")]
22 ScoreOutOfRange { value: f64 },
23}
24
25pub type NousResult<T> = Result<T, NousError>;
27
28#[cfg(test)]
29mod tests {
30 use super::*;
31
32 #[test]
33 fn error_display_evaluator_failed() {
34 let err = NousError::EvaluatorFailed {
35 name: "token_efficiency".into(),
36 message: "division by zero".into(),
37 };
38 assert!(err.to_string().contains("token_efficiency"));
39 assert!(err.to_string().contains("division by zero"));
40 }
41
42 #[test]
43 fn error_display_score_out_of_range() {
44 let err = NousError::ScoreOutOfRange { value: 1.5 };
45 assert!(err.to_string().contains("1.5"));
46 }
47}