use std::error::Error;
use std::fmt;
use std::io;
use std::path::PathBuf;
#[derive(Debug)]
pub enum ConfigError {
FileRead { path: PathBuf, source: io::Error },
FileParse {
path: PathBuf,
source: toml::de::Error,
},
ParseOverrides(String),
Validation(String),
}
impl fmt::Display for ConfigError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
ConfigError::FileRead { path, source } => {
write!(f, "Failed to read config file at {:?}: {}", path, source)
}
ConfigError::FileParse { path, source } => {
write!(f, "Failed to parse config file at {:?}: {}", path, source)
}
ConfigError::ParseOverrides(msg) => {
write!(f, "Failed to parse generator config overrides: {}", msg)
}
ConfigError::Validation(msg) => {
write!(f, "Configuration validation error: {}", msg)
}
}
}
}
impl Error for ConfigError {
fn source(&self) -> Option<&(dyn Error + 'static)> {
match self {
ConfigError::FileRead { source, .. } => Some(source),
ConfigError::FileParse { source, .. } => Some(source),
ConfigError::ParseOverrides(_) => None,
ConfigError::Validation(_) => None,
}
}
}