Я пытаюсь использовать Serde для десериализации файлов JSON (serde-json
) и XML (serde-xml-rs
) на основе следующей структуры:
use serde_derive::Deserialize;
#[derive(Debug, Clone, PartialEq, Deserialize)]
pub struct SchemaConfig {
pub name: String,
#[serde(rename = "Cube")]
pub cubes: Vec<CubeConfig>,
}
Поля, по которым я десериализуюсь, имеют разные имена в зависимости от типа файла. В этом случае я хотел бы, чтобы файл JSON имел ключ cubes
со списком кубов, но эквивалент в XML будет состоять из нескольких элементов <Cube />
.
Я не могу понять, как принять и cubes
, и Cube
в качестве ключей для десериализации. Самым близким, что я обнаружил, была опция #[serde(rename = "Cube")]
, но когда я использую ее, десериализация JSON перестает работать, поскольку она принимает только ключ Cube
. Если я уберу эту опцию, десериализация XML перестанет работать, так как она только примет в качестве ключа cubes
.
Есть ли простой способ сделать это в Серде?