use chrono::{DateTime, Utc};
use thiserror::Error;
#[derive(Debug, Error)]
pub enum ContextError {
#[error("Serialization error: {0}")]
Serialization(#[from] serde_json::Error),
#[error("Key not found: {0}")]
KeyNotFound(String),
#[error("Type mismatch for key {0}")]
TypeMismatch(String),
#[error("Key already exists: {0}")]
KeyExists(String),
#[error("Database error: {0}")]
Database(String),
#[error("Connection pool error: {0}")]
ConnectionPool(String),
}
#[derive(Debug, Error)]
pub enum TaskError {
#[error("Task execution failed: {message}")]
ExecutionFailed {
message: String,
task_id: String,
timestamp: DateTime<Utc>,
},
#[error("Task dependency not satisfied: {dependency} required by {task_id}")]
DependencyNotSatisfied { dependency: String, task_id: String },
#[error("Task timeout: {task_id} exceeded {timeout_seconds}s")]
Timeout {
task_id: String,
timeout_seconds: u64,
},
#[error("Context error in task {task_id}: {error}")]
ContextError {
task_id: String,
error: ContextError,
},
#[error("Task validation failed: {message}")]
ValidationFailed { message: String },
#[error("Unknown error in task {task_id}: {message}")]
Unknown { task_id: String, message: String },
#[error("Task readiness check failed: {task_id}")]
ReadinessCheckFailed { task_id: String },
#[error("Trigger rule evaluation failed: {task_id}")]
TriggerRuleFailed { task_id: String },
}
impl From<ContextError> for TaskError {
fn from(error: ContextError) -> Self {
TaskError::ContextError {
task_id: "unknown".to_string(),
error,
}
}
}
#[derive(Debug, Error)]
pub enum CheckpointError {
#[error("Failed to save checkpoint for task {task_id}: {message}")]
SaveFailed { task_id: String, message: String },
#[error("Failed to load checkpoint for task {task_id}: {message}")]
LoadFailed { task_id: String, message: String },
#[error("Checkpoint serialization error: {0}")]
Serialization(#[from] serde_json::Error),
#[error("Checkpoint storage error: {message}")]
StorageError { message: String },
#[error("Checkpoint validation failed: {message}")]
ValidationFailed { message: String },
}