tag | 5fe59cc48be1856be30ca6fd4a027beccf57f507 | |
---|---|---|
tagger | The Android Open Source Project <initial-contribution@android.com> | Fri Sep 17 01:20:06 2021 -0700 |
object | d34029dbb9322ccd5d74cb6d7df86cacbf882f8f |
Platform Tools Release 31.0.3 (7562133)
commit | d34029dbb9322ccd5d74cb6d7df86cacbf882f8f | [log] [tgz] |
---|---|---|
author | Joel Galenson <jgalenson@google.com> | Thu Jul 15 10:53:03 2021 -0700 |
committer | Joel Galenson <jgalenson@google.com> | Fri Jul 16 09:44:16 2021 -0700 |
tree | f2b58bf848f0e758f307983f8ac1ab07a33111c0 | |
parent | 8d1122941c73643f2149dd24a72db186efab86a9 [diff] |
Enable tests Fixes: 193790055 Test: Run tests Change-Id: Id166833b38f02ffcd7550cd510d325b9c61710a7
xml-rs based deserializer for Serde (compatible with 0.9+)
Use serde_xml_rs::from_reader(...)
on any type that implements std::io::Read
as following:
#[macro_use] extern crate serde_derive; extern crate serde; extern crate serde_xml_rs; use serde_xml_rs::from_reader; #[derive(Debug, Deserialize)] struct Item { pub name: String, pub source: String } #[derive(Debug, Deserialize)] struct Project { pub name: String, #[serde(rename = "Item", default)] pub items: Vec<Item> } fn main() { let s = r##" <Project name="my_project"> <Item name="hello" source="world.rs" /> </Project> "##; let project: Project = from_reader(s.as_bytes()).unwrap(); println!("{:#?}", project); }
Alternatively, you can use serde_xml_rs::Deserializer
to create a deserializer from a preconfigured xml_rs::EventReader
.
If you have an input of the form <foo abc="xyz">bar</foo>
, and you want to get at thebar
, you can use the special name $value
:
struct Foo { pub abc: String, #[serde(rename = "$value")] pub body: String, }
Deserializer tries to be as intuitive as possible.
However, there are some edge cases where you might get unexpected errors, so it's best to check out tests
for expectations.