use thiserror::Error;
#[derive(Debug, Clone, Error)]
pub enum ConfigError {
#[error("config parse error: {0}")]
Parse(String),
#[error("incoherent config: {0}")]
Incoherent(String),
#[error("invalid field {field}: {reason}")]
InvalidField {
field: String,
reason: String,
},
}
impl ConfigError {
#[must_use]
pub fn kind(&self) -> &'static str {
match self {
Self::Parse(_) => "parse",
Self::Incoherent(_) => "incoherent",
Self::InvalidField { .. } => "invalid_field",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn kinds_are_stable() {
assert_eq!(ConfigError::Parse("x".into()).kind(), "parse");
assert_eq!(ConfigError::Incoherent("x".into()).kind(), "incoherent");
assert_eq!(
ConfigError::InvalidField {
field: "x".into(),
reason: "y".into(),
}
.kind(),
"invalid_field"
);
}
}