use std::fmt;
#[derive(Debug)]
pub struct ConfigError {
message: String,
source: Option<String>,
kind: Option<String>,
}
impl ConfigError {
pub fn new(msg: impl Into<String>) -> Self {
ConfigError {
message: msg.into(),
source: None,
kind: None,
}
}
pub fn with_source(mut self, source: impl Into<String>) -> Self {
self.source = Some(source.into());
self
}
pub fn with_kind(mut self, kind: impl Into<String>) -> Self {
self.kind = Some(kind.into());
self
}
}
impl fmt::Display for ConfigError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "Configuration error")?;
if let Some(kind) = &self.kind {
write!(f, " [{}]", kind)?;
}
if let Some(source) = &self.source {
write!(f, " in {}", source)?;
}
write!(f, ": {}", self.message)
}
}
impl std::error::Error for ConfigError {}