0

所以我正在用 Rust 编写一个程序(我对它很陌生),它读取一个 json 配置文件并根据输入做一些事情。我设法使用serde_json成功解析了 json 。我想让用户做的下一件事是能够指定一些高级选项,但我不知道如何解析输入。默认的 json 看起来像这样:

{
  value: true
}

将其解析为这样的结构:

#[derive(Deserialize)]
pub struct Config {
  value: bool
}

我将如何为用户添加能够输入 abool或 an的选项object

{
  value: {
    avanced_value: true
  }
}

我试过使用enum这样的,但似乎bool不能在枚举中使用。

#[derive(Deserialize)]
pub struct Config {
  value: ValueEnum
}

#[derive(Deserialize)]
pub enum ValueEnum {
  bool,
  Config(ValueConfig),
}

#[derive(Deserialize)]
pub struct ValueConfig {
  advanced_value: bool
}

我是否遗漏了一些明显的东西,或者我应该重组输入 json 吗?提前Tnx。

4

1 回答 1

1

您没有将 bool 包装在枚举变体中(就像您对 ValueConfig 所做的那样)。同样默认情况下,serde 标记枚举,这可能不是您想要的。您想使用未标记的枚举:

#[derive(Deserialize)]
pub struct Config {
  value: ValueEnum
}

#[derive(Deserialize)]
#[serde(untagged)]
pub enum ValueEnum {
  Bool(bool),
  Config(ValueConfig),
}

#[derive(Deserialize)]
pub struct ValueConfig {
  advanced_value: bool
}
于 2020-09-18T20:03:52.210 回答