Skip to main content

ironflow_worker/
error.rs

1//! Error types for the background worker.
2
3use thiserror::Error;
4
5use ironflow_core::error::OperationError;
6use ironflow_engine::error::EngineError;
7use ironflow_store::error::StoreError;
8
9/// Errors produced by the worker.
10///
11/// # Examples
12///
13/// ```
14/// use ironflow_worker::error::WorkerError;
15///
16/// let err = WorkerError::Shutdown("worker stopped".to_string());
17/// assert!(err.to_string().contains("shutdown"));
18/// ```
19#[derive(Debug, Error)]
20pub enum WorkerError {
21    /// An operation (Shell, Http, Agent) failed during step execution.
22    #[error("operation error: {0}")]
23    Operation(#[from] OperationError),
24
25    /// The engine returned an error.
26    #[error("engine error: {0}")]
27    Engine(#[from] EngineError),
28
29    /// The store returned an error.
30    #[error("store error: {0}")]
31    Store(#[from] StoreError),
32
33    /// A shutdown-related error.
34    #[error("shutdown error: {0}")]
35    Shutdown(String),
36
37    /// An internal error.
38    #[error("internal error: {0}")]
39    Internal(String),
40}
41
42#[cfg(test)]
43mod tests {
44    use super::*;
45
46    #[test]
47    fn shutdown_error_display() {
48        let err = WorkerError::Shutdown("worker stopped".to_string());
49        let msg = err.to_string();
50        assert!(msg.contains("shutdown error"));
51        assert!(msg.contains("worker stopped"));
52    }
53
54    #[test]
55    fn internal_error_display() {
56        let err = WorkerError::Internal("something went wrong".to_string());
57        let msg = err.to_string();
58        assert!(msg.contains("internal error"));
59        assert!(msg.contains("something went wrong"));
60    }
61
62    #[test]
63    fn shutdown_error_debug() {
64        let err = WorkerError::Shutdown("test".to_string());
65        let debug_str = format!("{:?}", err);
66        assert!(debug_str.contains("Shutdown"));
67    }
68
69    #[test]
70    fn internal_error_debug() {
71        let err = WorkerError::Internal("test".to_string());
72        let debug_str = format!("{:?}", err);
73        assert!(debug_str.contains("Internal"));
74    }
75}