use snafu::Snafu;
#[derive(Debug, Snafu)]
#[snafu(visibility(pub))]
pub enum GeneratorError {
#[snafu(display("Failed to render template '{}': {}", template_path, source))]
TemplateRender {
template_path: String,
source: minijinja::Error,
},
#[snafu(display("Template '{}' not found: {}", template_path, source))]
TemplateNotFound {
template_path: String,
source: minijinja::Error,
},
#[snafu(display("Failed to generate API client '{}': {}", client_name, source))]
ApiClientGeneration {
client_name: String,
source: Box<dyn std::error::Error + Send + Sync>,
},
#[snafu(display("Failed to generate model '{}': {}", model_name, source))]
ModelGeneration {
model_name: String,
source: Box<dyn std::error::Error + Send + Sync>,
},
#[snafu(display("Failed to map type: {}", source))]
TypeMapping {
source: Box<dyn std::error::Error + Send + Sync>,
},
#[snafu(display("File I/O error: {}", source))]
Io { source: std::io::Error },
#[snafu(display("Failed to parse config: {}", source))]
ConfigParse { source: toml::de::Error },
#[snafu(display("Generator error: {}", message))]
Generic { message: String },
}
impl From<std::io::Error> for GeneratorError {
fn from(err: std::io::Error) -> Self {
GeneratorError::Io { source: err }
}
}
impl From<toml::de::Error> for GeneratorError {
fn from(err: toml::de::Error) -> Self {
GeneratorError::ConfigParse { source: err }
}
}
impl From<Box<dyn std::error::Error + Send + Sync>> for GeneratorError {
fn from(err: Box<dyn std::error::Error + Send + Sync>) -> Self {
GeneratorError::Generic {
message: err.to_string(),
}
}
}