use thiserror::Error;
#[derive(Debug, Error)]
pub enum SubstrateError {
#[error("not found: {0}")]
NotFound(String),
#[error("invalid state transition: {from:?} -> {to:?}")]
InvalidTransition {
from: crate::domain::TaskState,
to: crate::domain::TaskState,
},
#[error("claim conflict: {0}")]
ClaimConflict(String),
#[error("engine error: {0}")]
Engine(String),
#[error("transport error: {0}")]
Transport(String),
#[error("store error: {0}")]
Store(String),
#[error("routing error: {0}")]
Routing(String),
#[error("serde error: {0}")]
Serde(String),
#[error("io error: {0}")]
Io(String),
#[error("invalid schedule: {0}")]
InvalidSchedule(String),
#[error("workflow cycle: {0}")]
CycleDetected(String),
#[error("duplicate work: {0}")]
DuplicateWork(String),
#[error("schema validation: {0}")]
SchemaValidation(String),
#[error("memory error: {0}")]
Memory(String),
#[error("process error: {0}")]
Process(String),
#[error("watcher error: {0}")]
Watcher(String),
#[error("cloud dispatch error: {0}")]
CloudDispatch(String),
#[error("{0}")]
Other(String),
}
impl From<serde_json::Error> for SubstrateError {
fn from(e: serde_json::Error) -> Self {
SubstrateError::Serde(e.to_string())
}
}
pub type Result<T> = std::result::Result<T, SubstrateError>;