1use std::fmt;
2
3#[derive(Debug)]
4pub enum Error {
5 XmlParse(roxmltree::Error),
6 XPath(String),
7 MissingField(String),
8 Custom(String),
9}
10
11impl fmt::Display for Error {
12 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
13 match self {
14 Error::XmlParse(e) => write!(f, "XML parse error: {}", e),
15 Error::XPath(msg) => write!(f, "XPath error: {}", msg),
16 Error::MissingField(field) => write!(f, "missing field: {}", field),
17 Error::Custom(msg) => write!(f, "{}", msg),
18 }
19 }
20}
21
22impl std::error::Error for Error {
23 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
24 match self {
25 Error::XmlParse(e) => Some(e),
26 _ => None,
27 }
28 }
29}
30
31impl serde::de::Error for Error {
32 fn custom<T: fmt::Display>(msg: T) -> Self {
33 Error::Custom(msg.to_string())
34 }
35}
36
37impl From<roxmltree::Error> for Error {
38 fn from(e: roxmltree::Error) -> Self {
39 Error::XmlParse(e)
40 }
41}