Crates.io | xml-stinks |
lib.rs | xml-stinks |
version | 0.1.0 |
source | src |
created_at | 2023-05-14 17:32:02.888097 |
updated_at | 2023-05-14 17:32:02.888097 |
description | Powerful & easy manual XML deserialization using quick-xml |
homepage | |
repository | https://git.hampusmat.com/xml-stinks |
max_upload_size | |
id | 864394 |
size | 64,374 |
Powerful, fast & easy manual XML deserialization using abstractions over quick-xml.
use std::convert::Infallible;
use xml_stinks::deserializer::buffered::Buffered as BufferedDeserializer;
use xml_stinks::deserializer::{Deserializer, IgnoreEnd};
use xml_stinks::tagged::TagStart;
use xml_stinks::DeserializeTagged;
let mut deserializer =
BufferedDeserializer::new("<foo>Baz<bar>DF</bar></foo>".as_bytes());
let foo = deserializer.de_tag::<Foo>("foo", IgnoreEnd::No).unwrap();
assert_eq!(&foo.name, "Baz");
assert_eq!(foo.bar.num, 223);
struct Foo
{
name: String,
bar: Bar,
}
impl DeserializeTagged for Foo
{
type Error = Infallible;
fn deserialize<TDeserializer: Deserializer>(
start: &TagStart,
deserializer: &mut TDeserializer,
) -> Result<Self, Self::Error>
{
let name = deserializer.de_text().unwrap();
let bar = deserializer.de_tag::<Bar>("bar", IgnoreEnd::No).unwrap();
Ok(Self { name, bar })
}
}
struct Bar
{
num: u32,
}
impl DeserializeTagged for Bar
{
type Error = Infallible;
fn deserialize<TDeserializer: Deserializer>(
start: &TagStart,
deserializer: &mut TDeserializer,
) -> Result<Self, Self::Error>
{
let num = u32::from_str_radix(&deserializer.de_text().unwrap(), 16).unwrap();
Ok(Self { num })
}
}