summaryrefslogtreecommitdiff
path: root/makima/src/daemon/error.rs
diff options
context:
space:
mode:
authorsoryu <soryu@soryu.co>2026-01-11 05:52:14 +0000
committersoryu <soryu@soryu.co>2026-01-15 00:21:16 +0000
commit87044a747b47bd83249d61a45842c7f7b2eae56d (patch)
treeef2000ce79ffcc2723ef841acef5aa1deb1d5378 /makima/src/daemon/error.rs
parent077820c4167c168072d217a1b01df840463a12a8 (diff)
downloadsoryu-87044a747b47bd83249d61a45842c7f7b2eae56d.tar.gz
soryu-87044a747b47bd83249d61a45842c7f7b2eae56d.zip
Contract system
Diffstat (limited to 'makima/src/daemon/error.rs')
-rw-r--r--makima/src/daemon/error.rs75
1 files changed, 75 insertions, 0 deletions
diff --git a/makima/src/daemon/error.rs b/makima/src/daemon/error.rs
new file mode 100644
index 0000000..b993169
--- /dev/null
+++ b/makima/src/daemon/error.rs
@@ -0,0 +1,75 @@
+//! Error types for the makima daemon.
+
+use thiserror::Error;
+use uuid::Uuid;
+
+/// Top-level daemon error type.
+#[derive(Error, Debug)]
+pub enum DaemonError {
+ #[error("WebSocket error: {0}")]
+ WebSocket(#[from] tokio_tungstenite::tungstenite::Error),
+
+ #[error("Worktree error: {0}")]
+ Worktree(#[from] crate::daemon::worktree::WorktreeError),
+
+ #[error("Process error: {0}")]
+ Process(#[from] crate::daemon::process::ClaudeProcessError),
+
+ #[error("Task error: {0}")]
+ Task(#[from] TaskError),
+
+ #[error("Configuration error: {0}")]
+ Config(#[from] config::ConfigError),
+
+ #[error("Database error: {0}")]
+ Database(#[from] rusqlite::Error),
+
+ #[error("IO error: {0}")]
+ Io(#[from] std::io::Error),
+
+ #[error("JSON error: {0}")]
+ Json(#[from] serde_json::Error),
+
+ #[error("Authentication failed: {0}")]
+ AuthFailed(String),
+
+ #[error("Connection lost")]
+ ConnectionLost,
+
+ #[error("Server error: {code} - {message}")]
+ ServerError { code: String, message: String },
+}
+
+/// Task management errors.
+#[derive(Error, Debug)]
+pub enum TaskError {
+ #[error("Task not found: {0}")]
+ NotFound(Uuid),
+
+ #[error("Invalid state transition from {from} to {to}")]
+ InvalidStateTransition { from: String, to: String },
+
+ #[error("Concurrency limit reached")]
+ ConcurrencyLimit,
+
+ #[error("Task already exists: {0}")]
+ AlreadyExists(Uuid),
+
+ #[error("Task not running: {0}")]
+ NotRunning(Uuid),
+
+ #[error("Failed to send message to task: {0}")]
+ MessageFailed(String),
+
+ #[error("Task setup failed: {0}")]
+ SetupFailed(String),
+
+ #[error("Task execution failed: {0}")]
+ ExecutionFailed(String),
+}
+
+/// Result type alias for daemon operations.
+pub type Result<T> = std::result::Result<T, DaemonError>;
+
+/// Result type alias for task operations.
+pub type TaskResult<T> = std::result::Result<T, TaskError>;