use thiserror::Error;
#[derive(Debug, Error)]
pub enum NoosError {
#[error("AI provider error: {provider} — {message}")]
Provider {
provider: String,
message: String,
status: Option<u16>,
},
#[error("Plugin error: {plugin_id} — {message}")]
Plugin { plugin_id: String, message: String },
#[error("Pipeline error: {composition_id} step {step} — {message}")]
Pipeline {
composition_id: String,
step: usize,
message: String,
},
#[error("Serialization error: {0}")]
Serialization(String),
#[error("Storage error: {0}")]
Storage(String),
#[error("Operation cancelled")]
Cancelled,
#[error("Unsupported intervention: {0}")]
UnsupportedIntervention(String),
#[error("Internal error: {0}")]
Internal(String),
}
impl From<serde_json::Error> for NoosError {
fn from(e: serde_json::Error) -> Self {
Self::Serialization(e.to_string())
}
}
pub type NoosResult<T> = Result<T, NoosError>;