Skip to main content

serde_xpath/
error.rs

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}