Как выразить этот формат TOML в Serde

У меня есть структура Rust, которую я могу десериализовать:

pub struct ProcessReference {
    pub alias: Name,
    pub source: String,
    #[serde(rename = "input")]
    pub initializations: Option<HashMap<String, JsonValue>>,
}

где input не является обязательным. Это принимает форматы TOML:

[[process]]
alias = "other"
source = "other.toml"

or

[[process]]
alias = "other"
source = "other.toml"
input.input1 = 1

Я хотел бы, чтобы input можно было расширить вторым значением, а не только JsonValue, чтобы его также можно было десериализовать:

[[process]]
alias = "other"
source = "other.toml"
input.input1 = {1, true}

аналогично тому, что используется Cargo для зависимостей:

[dependencies]
flowrlib = { path = "../flowrlib", version = "~0.7.0" }
yaml-rust = "~0.3.5"

Как я могу выразить это в Serde?


person Andrew Mackenzie    schedule 20.03.2019    source источник
comment
Какой именно тип Rust вы ожидаете для десериализации {1, true}? Это даже не похоже на действительный TOML.   -  person Shepmaster    schedule 20.03.2019
comment
Нет, наверное, нет. Я хотел в основном указать либо значение (на самом деле это значение json), либо значение и логическое значение... Массивы можно смешивать. В конце концов мне пришлось обойти это, используя перечисление без тегов, которое оказалось более подробным, чем я хотел, но это работает.   -  person Andrew Mackenzie    schedule 22.03.2019