use serde::de::DeserializeOwned;
use crate::ParseError;
pub fn from_str<T: DeserializeOwned>(xml: &str) -> Result<T, ParseError> {
quick_xml::de::from_str(xml).map_err(ParseError::Deserialize)
}
pub fn from_reader<R: std::io::BufRead, T: DeserializeOwned>(reader: R) -> Result<T, ParseError> {
quick_xml::de::from_reader(reader).map_err(ParseError::Deserialize)
}
#[cfg(test)]
mod tests {
use super::*;
#[derive(serde::Deserialize, Debug)]
struct Foo {
#[allow(dead_code)]
x: u32,
}
#[test]
fn from_str_invalid_xml_returns_error() {
let result: Result<Foo, _> = from_str("<<<garbage>>>");
assert!(result.is_err(), "malformed XML must return an error");
}
#[test]
fn from_reader_invalid_xml_returns_error() {
let xml = b"<<<garbage>>>";
let result: Result<Foo, _> = from_reader(xml.as_ref());
assert!(result.is_err(), "malformed XML must return an error");
}
}