Jesús Pérez 09a97ac8f5
chore: update platform submodule to monorepo crates structure
Platform restructured into crates/, added AI service and detector,
       migrated control-center-ui to Leptos 0.8
2026-01-08 21:32:59 +00:00

96 lines
2.7 KiB
Rust

//! Error types for the Provisioning MCP Server
use thiserror::Error;
#[derive(Error, Debug)]
pub enum ProvisioningError {
#[error("Invalid input: {0}")]
InvalidInput(String),
#[error("Provisioning command failed: {0}")]
CommandFailed(String),
#[error("AI service error: {0}")]
AIServiceError(String),
#[error("Configuration error: {0}")]
ConfigError(String),
#[error("Infrastructure not found: {0}")]
InfrastructureNotFound(String),
#[error("Service not available: {0}")]
ServiceUnavailable(String),
#[error("Parse error: {0}")]
ParseError(String),
#[error("IO error: {0}")]
IoError(#[from] std::io::Error),
#[error("JSON error: {0}")]
JsonError(#[from] serde_json::Error),
#[error("HTTP error: {0}")]
HttpError(#[from] reqwest::Error),
#[error("Validation error: {0}")]
ValidationError(String),
}
impl ProvisioningError {
/// Create a new invalid input error
pub fn invalid_input<S: Into<String>>(msg: S) -> Self {
Self::InvalidInput(msg.into())
}
/// Create a new command failed error
pub fn command_failed<S: Into<String>>(msg: S) -> Self {
Self::CommandFailed(msg.into())
}
/// Create a new AI service error
pub fn ai_service_error<S: Into<String>>(msg: S) -> Self {
Self::AIServiceError(msg.into())
}
/// Create a new configuration error
pub fn config_error<S: Into<String>>(msg: S) -> Self {
Self::ConfigError(msg.into())
}
/// Check if error is recoverable
pub fn is_recoverable(&self) -> bool {
match self {
Self::InvalidInput(_) => true,
Self::CommandFailed(_) => false,
Self::AIServiceError(_) => true,
Self::ConfigError(_) => false,
Self::InfrastructureNotFound(_) => true,
Self::ServiceUnavailable(_) => true,
Self::ParseError(_) => true,
Self::IoError(_) => false,
Self::JsonError(_) => true,
Self::HttpError(_) => true,
Self::ValidationError(_) => true,
}
}
/// Get error category for logging
pub fn category(&self) -> &'static str {
match self {
Self::InvalidInput(_) => "input",
Self::CommandFailed(_) => "command",
Self::AIServiceError(_) => "ai",
Self::ConfigError(_) => "config",
Self::InfrastructureNotFound(_) => "infrastructure",
Self::ServiceUnavailable(_) => "service",
Self::ParseError(_) => "parse",
Self::IoError(_) => "io",
Self::JsonError(_) => "json",
Self::HttpError(_) => "http",
Self::ValidationError(_) => "validation",
}
}
}