Skip to navigation
Convert roxmltree documents into Serde-compatible types
12.10.22
use serde::Deserialize; use serde_roxmltree::from_str; #[derive(Deserialize)] struct Record { field: String, } let record = from_str::
("
foobar
")?; assert_eq!(record.field, "foobar"); # # Ok::<(), Box
>(()) [Borrowing types][de::Deserialize] must be deserialized from a [Document] using [from_doc]: use roxmltree::Document; use serde::Deserialize; use serde_roxmltree::from_doc; #[derive(Deserialize)] struct Record<'a> { field: &'a str, } let document = Document::parse("
foobar
")?; let record = from_doc::
(&document)?; assert_eq!(record.field, "foobar"); # # Ok::<(), Box
>(()) Fields of structures map to child elements and attributes: use serde::Deserialize; use serde_roxmltree::from_str; #[derive(Deserialize)] struct Record { child: String, attribute: i32, } let record = from_str::
(r#"
foobar
"#)?; assert_eq!(record.child, "foobar"); assert_eq!(record.attribute, 42); # # Ok::<(), Box
>(()) Sequences collect repeated child elements: use serde::Deserialize; use serde_roxmltree::from_str; #[derive(Deserialize)] struct Record { field: Vec
, } let record = from_str::
("
foo
bar
")?; assert_eq!(record.field, ["foo", "bar"]); # # Ok::<(), Box
>(()) Enum variants describe alternatives: use serde::Deserialize; use serde_roxmltree::from_str; #[derive(Debug, PartialEq, Deserialize)] #[serde(rename_all = "lowercase")] enum Record { Float(f32), Integer(i32), } let record = from_str::
("
42.0
")?; assert_eq!(record, Record::Float(42.0)); let record = from_str::
("
23
")?; assert_eq!(record, Record::Integer(23)); # # Ok::<(), Box
>(()) The reserved name $text is used to directly refer to the text within an element: use serde::Deserialize; use serde_roxmltree::from_str; #[derive(Deserialize)] struct Record { child: Child, } #[derive(Deserialize)] struct Child { #[serde(rename = "$text")] text: String, attribute: i32, } let record = from_str::
(r#"
foobar
"#)?; assert_eq!(record.child.text, "foobar"); assert_eq!(record.child.attribute, 42); # # Ok::<(), Box
>(())
https://lib.rs/crates/serde-roxmltree
Reply
Anonymous
Information Epoch 1742419094
Use software leverage to your advantage.
Home
Notebook
Contact us