Skip to main content

funera_orchestrate/
error.rs

1use thiserror::Error;
2
3#[derive(Debug, Error)]
4pub enum OrchestrateError {
5    #[error("agent not configured: {0}")]
6    Config(String),
7
8    #[error("session error: {0}")]
9    Session(#[from] anyhow::Error),
10
11    #[error("LLM error: {0}")]
12    Llm(String),
13
14    #[error("cancelled")]
15    Cancelled,
16}
17
18#[cfg(test)]
19mod tests {
20    use super::*;
21
22    #[test]
23    fn error_display_config() {
24        let err = OrchestrateError::Config("missing key".into());
25        assert_eq!(err.to_string(), "agent not configured: missing key");
26    }
27
28    #[test]
29    fn error_display_session() {
30        let inner = anyhow::anyhow!("network failure");
31        let err = OrchestrateError::Session(inner);
32        assert!(err.to_string().starts_with("session error: "));
33    }
34
35    #[test]
36    fn error_display_llm() {
37        let err = OrchestrateError::Llm("rate limited".into());
38        assert_eq!(err.to_string(), "LLM error: rate limited");
39    }
40
41    #[test]
42    fn error_display_cancelled() {
43        let err = OrchestrateError::Cancelled;
44        assert_eq!(err.to_string(), "cancelled");
45    }
46
47    #[test]
48    fn error_from_anyhow() {
49        let inner = anyhow::anyhow!("something went wrong");
50        let err: OrchestrateError = inner.into();
51        assert!(err.to_string().starts_with("session error: "));
52    }
53}