steer_core/
error.rs

1use thiserror::Error;
2
3use crate::{
4    api::ApiError,
5    app::AgentExecutorError,
6    auth::AuthError,
7    session::{manager::SessionManagerError, store::SessionStoreError},
8};
9
10pub type Result<T> = std::result::Result<T, Error>;
11
12#[derive(Debug, Error)]
13pub enum Error {
14    #[error(transparent)]
15    Api(#[from] ApiError),
16    #[error(transparent)]
17    Auth(#[from] AuthError),
18    #[error(transparent)]
19    AgentExecutor(#[from] AgentExecutorError),
20    #[error(transparent)]
21    SessionManager(#[from] SessionManagerError),
22    #[error(transparent)]
23    SessionStore(#[from] SessionStoreError),
24    #[error(transparent)]
25    Workspace(#[from] WorkspaceError),
26    #[error(transparent)]
27    Tool(#[from] steer_tools::ToolError),
28    #[error("I/O error: {0}")]
29    Io(#[from] std::io::Error),
30    #[error("Configuration error: {0}")]
31    Configuration(String),
32    #[error("Invalid operation: {0}")]
33    InvalidOperation(String),
34    #[error("Not found: {0}")]
35    NotFound(String),
36    #[error("Cancelled")]
37    Cancelled,
38    #[error("Ignore error: {0}")]
39    Ignore(#[from] ignore::Error),
40    #[error("gRPC transport error: {0}")]
41    Transport(String),
42    #[error("gRPC status error: {0}")]
43    Status(String),
44}
45
46#[derive(Debug, Error)]
47pub enum WorkspaceError {
48    #[error("Workspace not supported: {0}")]
49    NotSupported(String),
50    #[error("Failed to collect environment: {0}")]
51    EnvironmentCollection(String),
52    #[error("Tool execution failed: {0}")]
53    ToolExecution(String),
54    #[error("Invalid workspace path: {0}")]
55    InvalidPath(String),
56    #[error(transparent)]
57    Git(#[from] Box<dyn std::error::Error + Send + Sync + 'static>),
58    #[error("Remote workspace error: {0}")]
59    Remote(String),
60}
61
62impl From<steer_workspace::WorkspaceError> for WorkspaceError {
63    fn from(err: steer_workspace::WorkspaceError) -> Self {
64        match err {
65            steer_workspace::WorkspaceError::NotSupported(msg) => WorkspaceError::NotSupported(msg),
66            steer_workspace::WorkspaceError::ToolExecution(msg) => {
67                WorkspaceError::ToolExecution(msg)
68            }
69            steer_workspace::WorkspaceError::Git(e) => WorkspaceError::Git(e),
70            steer_workspace::WorkspaceError::Io(e) => {
71                WorkspaceError::EnvironmentCollection(e.to_string())
72            }
73            steer_workspace::WorkspaceError::Transport(msg) => WorkspaceError::Remote(msg),
74            steer_workspace::WorkspaceError::Status(msg) => WorkspaceError::Remote(msg),
75            steer_workspace::WorkspaceError::InvalidConfiguration(msg) => {
76                WorkspaceError::InvalidPath(msg)
77            }
78            steer_workspace::WorkspaceError::TonicTransport(e) => {
79                WorkspaceError::Remote(e.to_string())
80            }
81            steer_workspace::WorkspaceError::TonicStatus(e) => {
82                WorkspaceError::Remote(e.to_string())
83            }
84        }
85    }
86}
87
88impl From<steer_workspace::WorkspaceError> for Error {
89    fn from(err: steer_workspace::WorkspaceError) -> Self {
90        Error::Workspace(err.into())
91    }
92}