use thiserror::Error;
pub type Result<T> = std::result::Result<T, AetherError>;
#[derive(Debug, Error)]
pub enum AetherError {
#[error("Template parse error: {0}")]
TemplateParse(String),
#[error("Slot '{0}' not found in template")]
SlotNotFound(String),
#[error("AI provider error: {0}")]
ProviderError(String),
#[error("Validation failed for slot '{slot}': {error}")]
ValidationFailed { slot: String, error: String },
#[error("Maximum retries ({retries}) exceeded for slot '{slot}'. Last error: {last_error}")]
MaxRetriesExceeded { slot: String, retries: u32, last_error: String },
#[error("Network error: {0}")]
NetworkError(String),
#[error("Injection error: {0}")]
InjectionError(String),
#[error("Configuration error: {0}")]
ConfigError(String),
#[error("Render error: {0}")]
RenderError(String),
#[error("IO error: {0}")]
IoError(#[from] std::io::Error),
#[error("JSON error: {0}")]
JsonError(#[from] serde_json::Error),
#[error("Context serialization failed: {0}")]
ContextSerializationError(String),
#[error("Operation timed out after {0} seconds")]
Timeout(u64),
}