#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("Failed to retrieve current date: {0}")]
Date(String),
#[error("Failed to retrieve args: {0}")]
Args(String),
#[error("Failed to execute introspection query: {0}")]
Query(String),
#[error("Failed to read schema file: {0}")]
ReadSchemaFile(String),
#[error("Failed to prepare output directory '{0}': {1}")]
PrepareOutputDirectory(String, String),
#[error("Failed to write file '{0}': {1}")]
WriteFile(String, String),
#[error("Failed to parse GraphQL Introspection response: {0}")]
Serde(#[from] serde_json::Error),
#[error("Failed to load handlebars template: {0}")]
HandlebarsTemplate(#[from] handlebars::TemplateError),
#[error("Failed to render handlebars template: {0}")]
HandlebarsRender(#[from] handlebars::RenderError),
#[error("Failed to parse arguments: {0}")]
ClapError(#[from] clap::Error),
}
impl Error {
pub fn exit_code(&self) -> i32 {
match self {
Self::ClapError(_) => 2,
Self::Date(_) => 10,
Self::Args(_) => 11,
Self::Query(_) => 12,
Self::ReadSchemaFile(_) => 13,
Self::PrepareOutputDirectory(_, _) => 20,
Self::WriteFile(_, _) => 21,
Self::Serde(_) => 30,
Self::HandlebarsTemplate(_) | Self::HandlebarsRender(_) => 31,
}
}
}
pub type Result<T, E = Error> = std::result::Result<T, E>;