use thiserror::Error;
pub type Result<T> = std::result::Result<T, Error>;
#[derive(Debug, Error)]
pub enum Error {
#[error("Failed to read file '{path}': {source}")]
FileRead {
path: String,
#[source]
source: std::io::Error,
},
#[error("Failed to parse L5X file: {kind}")]
L5xParse {
kind: L5xParseErrorKind,
},
#[error("Failed to parse config file: {kind}")]
ConfigParse {
kind: ConfigErrorKind,
},
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum L5xParseErrorKind {
XmlDeserialize,
MissingElement(&'static str),
}
impl std::fmt::Display for L5xParseErrorKind {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
L5xParseErrorKind::XmlDeserialize => write!(f, "XML deserialization failed"),
L5xParseErrorKind::MissingElement(elem) => write!(f, "missing required element: {}", elem),
}
}
}
impl std::error::Error for L5xParseErrorKind {}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ConfigErrorKind {
TomlSyntax,
}
impl std::fmt::Display for ConfigErrorKind {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
ConfigErrorKind::TomlSyntax => write!(f, "TOML syntax error"),
}
}
}
impl std::error::Error for ConfigErrorKind {}