I have to deserialize an XML file into Rust structs:
<root date="2020">
<buecher>
<buch id="123">
<iban>123</iban>
</buch>
<buch id="456">
<iban>456</iban>
</buch>
</buecher>
</root>
extern crate serde;
extern crate serde_xml_rs;
#[macro_use]
extern crate serde_derive;
use std::fs::File;
use std::io::BufReader;
#[derive(Deserialize, Debug)]
struct Root {
date: String,
buecher: Buecher,
}
#[derive(Deserialize, Debug)]
struct Buecher {
buch: Vec<Buch>,
}
#[derive(Deserialize, Debug)]
struct Buch {
id: String,
iban: String,
}
fn main() {
let file = File::open("data/test.xml");
if file.is_ok() {
let buf_reader = BufReader::new(file.unwrap());
let data: Root = serde_xml_rs::from_reader(buf_reader).unwrap();
println!("{:#?}", data);
}
}
Is it possible to map the buch
children directly without the intermediate buecher
struct somehow?
Something like
#[derive(Deserialize, Debug)]
struct Root {
date: String,
#[serde(rename = "buecher/buch")]
buecher: Vec<Buch>,
}