use thiserror::Error;
#[derive(Debug, Error)]
pub enum ParseError {
#[error("XML parser error: {0}")]
XmlParserError(#[from] xmltree::ParseError),
#[error("URL parser error: {0}")]
UrlParseError(#[from] url::ParseError),
#[error("chrono parser error: {0}")]
ChronoParseError(#[from] chrono::ParseError),
#[error("Input/output error: {0} ")]
IOError(#[from] std::io::Error),
#[error("Invalid tag: {0}")]
InvalidTag(String),
#[error("A required tag is missing: {0}")]
MissingTag(String),
#[error("Missing attribute {0} required by tag {1}")]
MissingAttribute(String, String),
#[error("The tag {0} doesn't have a value")]
MissingValue(String),
#[error("Invalid value {0} passed to attribute {1} for tag {2}")]
InvalidValue(String, String, String),
}
impl ParseError {
pub fn invalid_value(val: &str, attr: &str, tag: &str) -> Self {
ParseError::InvalidValue(val.to_string(), attr.to_string(), tag.to_string())
}
pub fn invalid_tag(tag: &str) -> Self {
ParseError::InvalidTag(tag.to_string())
}
pub fn missing_attribute(attr: &str, tag: &str) -> Self {
ParseError::MissingAttribute(attr.to_string(), tag.to_string())
}
pub fn missing_tag(tag: &str) -> Self {
ParseError::MissingTag(tag.to_string())
}
pub fn missing_value(tag: &str) -> Self {
ParseError::MissingValue(tag.to_string())
}
}