Crates.io | tobz1000-serde-xml-rs |
lib.rs | tobz1000-serde-xml-rs |
version | 0.4.1-tobz1000-1 |
source | src |
created_at | 2021-01-24 20:17:41.006908 |
updated_at | 2021-01-24 20:45:12.14242 |
description | Pseudo-namespaced fork of `serde-xml-rs` |
homepage | |
repository | https://github.com/tobz1000/serde-xml-rs |
max_upload_size | |
id | 346144 |
size | 92,337 |
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.