Skip to main content

nous_core/
error.rs

1//! Nous error types.
2
3use thiserror::Error;
4
5/// Errors from Nous evaluation operations.
6#[derive(Debug, Error)]
7pub enum NousError {
8    /// An evaluator failed during execution.
9    #[error("evaluator '{name}' failed: {message}")]
10    EvaluatorFailed { name: String, message: String },
11
12    /// Registry error (duplicate name, not found).
13    #[error("registry error: {0}")]
14    Registry(String),
15
16    /// Serialization/deserialization error.
17    #[error("serde error: {0}")]
18    Serde(#[from] serde_json::Error),
19
20    /// Score value out of range.
21    #[error("score out of range: {value} (expected 0.0..=1.0)")]
22    ScoreOutOfRange { value: f64 },
23}
24
25/// Result type for Nous operations.
26pub 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}