2026-01-14 21:12:49 +00:00

85 lines
2.2 KiB
Rust

// Error types for VAPORA v1.0
// Phase 1: Comprehensive error handling with proper conversions
use thiserror::Error;
/// Main error type for VAPORA
#[derive(Error, Debug)]
pub enum VaporaError {
/// Configuration loading or validation error
#[error("Configuration error: {0}")]
ConfigError(String),
/// Database operation error
#[error("Database error: {0}")]
DatabaseError(String),
/// Resource not found error
#[error("Not found: {0}")]
NotFound(String),
/// Invalid input or validation error
#[error("Invalid input: {0}")]
InvalidInput(String),
/// Schema validation error (Nickel contracts)
#[error("Validation error: {0}")]
ValidationError(String),
/// Authentication or authorization error
#[error("Unauthorized: {0}")]
Unauthorized(String),
/// Agent system error
#[error("Agent error: {0}")]
AgentError(String),
/// LLM router error
#[error("LLM router error: {0}")]
LLMRouterError(String),
/// Workflow execution error
#[error("Workflow error: {0}")]
WorkflowError(String),
/// NATS messaging error
#[error("NATS error: {0}")]
NatsError(String),
/// IO operation error
#[error("IO error: {0}")]
IoError(#[from] std::io::Error),
/// Serialization/deserialization error
#[error("Serialization error: {0}")]
SerializationError(#[from] serde_json::Error),
/// TOML parsing error
#[error("TOML error: {0}")]
TomlError(String),
/// Internal server error
#[error("Internal server error: {0}")]
InternalError(String),
}
/// Result type alias using VaporaError
pub type Result<T> = std::result::Result<T, VaporaError>;
// ============================================================================
// Error Conversions
// ============================================================================
#[cfg(feature = "backend")]
impl From<surrealdb::Error> for VaporaError {
fn from(err: surrealdb::Error) -> Self {
VaporaError::DatabaseError(err.to_string())
}
}
impl From<toml::de::Error> for VaporaError {
fn from(err: toml::de::Error) -> Self {
VaporaError::TomlError(err.to_string())
}
}