Мне нужно использовать serde
для сериализации некоторых данных XML. У данных есть шаблон, в котором имя тега во множественном числе (например, CATS, DOGS) будет содержать несколько экземпляров подтегей тега в единственном числе (CAT, DOG), как показано ниже:
<pets>
<cats>
<cat>
<name>
cat 1
</name>
</cat>
<cat>
<name>
cat 2
</name>
</cat>
</cats>
<dogs>
<dog>
<name>
dog 1
</name>
</dog>
<dog>
<name>
dog 2
</name>
</dog>
</dogs>
</pets>
Теперь я могудесериализовать это с помощью serde
и serde-xml-rs
:
use serde::{Serialize, Deserialize};
use serde_xml_rs;
#[derive(Debug, Serialize, Deserialize)]
struct Pets {
pub cats: Cats,
pub dogs: Dogs,
}
#[derive(Debug, Serialize, Deserialize)]
struct Cats {
pub cat: Vec<Cat>,
}
#[derive(Debug, Serialize, Deserialize)]
struct Dogs {
pub dog: Vec<Dog>,
}
#[derive(Debug, Serialize, Deserialize)]
struct Cat {
name: String,
}
#[derive(Debug, Serialize, Deserialize)]
struct Dog {
name: String,
}
fn main() {
let s = xml_string_from_above;
let pets: Pets = serde_xml_rs::from_str(s).unwrap();
println!("{:#?}", pets);
}
Вопрос: Могу ли я использовать некоторый serde hack для удаления промежуточных структур Cats
и Dogs
и просто получитьнесколько экземпляров в векторе?
#[derive(Debug, Serialize, Deserialize)]
struct SlimmedPets {
pub cats: Vec<Cat>,
pub dogs: Vec<Dog>,
}
, при этом возвращая тот же XML при сериализации SlimmedPets
struct?