minor improvements to rustical_xml errors

This commit is contained in:
Lennart
2025-01-04 20:03:56 +01:00
parent fd4ed57775
commit a304714de8
7 changed files with 38 additions and 17 deletions

View File

@@ -27,8 +27,11 @@ impl Value for SyncLevel {
Ok(match val { Ok(match val {
"1" => Self::One, "1" => Self::One,
"Infinity" => Self::Infinity, "Infinity" => Self::Infinity,
// TODO: proper error _ => {
_ => return Err(rustical_xml::XmlDeError::UnknownError), return Err(rustical_xml::XmlDeError::Other(
"Invalid sync-level".to_owned(),
))
}
}) })
} }
fn serialize(&self) -> String { fn serialize(&self) -> String {

View File

@@ -26,8 +26,11 @@ impl Value for SyncLevel {
Ok(match val { Ok(match val {
"1" => Self::One, "1" => Self::One,
"Infinity" => Self::Infinity, "Infinity" => Self::Infinity,
// TODO: proper error _ => {
_ => return Err(rustical_xml::XmlDeError::UnknownError), return Err(rustical_xml::XmlDeError::Other(
"Invalid sync-level".to_owned(),
))
}
}) })
} }
fn serialize(&self) -> String { fn serialize(&self) -> String {

View File

@@ -26,8 +26,9 @@ impl Value for UtcDateTime {
let input = <String as Value>::deserialize(val)?; let input = <String as Value>::deserialize(val)?;
Ok(Self( Ok(Self(
NaiveDateTime::parse_from_str(&input, UTC_DATE_TIME) NaiveDateTime::parse_from_str(&input, UTC_DATE_TIME)
// TODO: proper error .map_err(|_| {
.map_err(|_| rustical_xml::XmlDeError::UnknownError)? rustical_xml::XmlDeError::Other("Could not parse as UTC timestamp".to_owned())
})?
.and_utc(), .and_utc(),
)) ))
} }

View File

@@ -31,7 +31,7 @@ impl Enum {
) -> Result<Self, rustical_xml::XmlDeError> { ) -> Result<Self, rustical_xml::XmlDeError> {
#(#variant_branches);* #(#variant_branches);*
Err(rustical_xml::XmlDeError::UnknownError) Err(rustical_xml::XmlDeError::InvalidVariant("could not match".to_owned()))
} }
} }
} }
@@ -162,12 +162,30 @@ impl Enum {
let empty = matches!(event, Event::Empty(_)); let empty = matches!(event, Event::Empty(_));
match event { match event {
Event::Decl(_) => { /* <?xml ... ?> ignore this */ }
Event::Comment(_) => { /* ignore this */ }
Event::Start(start) | Event::Empty(start) => { Event::Start(start) | Event::Empty(start) => {
return <Self as ::rustical_xml::XmlDeserialize>::deserialize(&mut reader, &start, empty); return <Self as ::rustical_xml::XmlDeserialize>::deserialize(&mut reader, &start, empty);
} }
_ => return Err(::rustical_xml::XmlDeError::UnknownError),
Event::Eof => return Err(::rustical_xml::XmlDeError::Eof),
Event::Text(bytes_text) => {
return Err(::rustical_xml::XmlDeError::UnsupportedEvent("Text"));
}
Event::CData(cdata) => {
return Err(::rustical_xml::XmlDeError::UnsupportedEvent("CDATA"));
}
Event::Comment(_) => { /* ignore */ }
Event::Decl(_) => {
return Err(::rustical_xml::XmlDeError::UnsupportedEvent("Declaration"));
}
Event::PI(_) => {
return Err(::rustical_xml::XmlDeError::UnsupportedEvent("Processing instruction"));
}
Event::DocType(doctype) => {
return Err(::rustical_xml::XmlDeError::UnsupportedEvent("Doctype in the middle of the document"));
}
Event::End(end) => {
return Err(::rustical_xml::XmlDeError::UnsupportedEvent("Premature end"));
}
}; };
} }
} }

View File

@@ -1,11 +1,9 @@
use quick_xml::name::Namespace; use quick_xml::events::{BytesStart, Event};
use quick_xml::name::ResolveResult; use quick_xml::name::ResolveResult;
use std::io::BufRead; use std::io::BufRead;
pub use xml_derive::XmlDeserialize; pub use xml_derive::XmlDeserialize;
pub use xml_derive::XmlDocument; pub use xml_derive::XmlDocument;
use quick_xml::events::{BytesStart, Event};
use crate::XmlDeError; use crate::XmlDeError;
use crate::XmlRootTag; use crate::XmlRootTag;
@@ -69,7 +67,7 @@ impl<T: XmlRootTag + XmlDeserialize> XmlDocument for T {
return Self::deserialize(&mut reader, &start, empty); return Self::deserialize(&mut reader, &start, empty);
} }
_ => return Err(XmlDeError::UnknownError), _ => return Err(XmlDeError::UnsupportedEvent("unknown, todo")),
}; };
} }
} }

View File

@@ -6,8 +6,6 @@ pub enum XmlDeError {
QuickXmlError(#[from] quick_xml::Error), QuickXmlError(#[from] quick_xml::Error),
#[error(transparent)] #[error(transparent)]
QuickXmlAttrError(#[from] quick_xml::events::attributes::AttrError), QuickXmlAttrError(#[from] quick_xml::events::attributes::AttrError),
#[error("Unknown error")]
UnknownError,
#[error("Invalid tag [{0}]{1}. Expected [{2}]{3}")] #[error("Invalid tag [{0}]{1}. Expected [{2}]{3}")]
InvalidTag(String, String, String, String), InvalidTag(String, String, String, String),
#[error("Missing field {0}")] #[error("Missing field {0}")]

View File

@@ -57,7 +57,7 @@ impl Value for &str {
self.to_string() self.to_string()
} }
fn deserialize(val: &str) -> Result<Self, XmlDeError> { fn deserialize(_val: &str) -> Result<Self, XmlDeError> {
Err(XmlDeError::Other("TODO: Handle this error".to_owned())) Err(XmlDeError::Other("TODO: Handle this error".to_owned()))
} }
} }