Я пытаюсь использовать 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
в качестве ключа.
Есть ли простой способ сделать это в Serde?