所以我正在用Rust (我是个新手)编写一个程序,它读取一个json配置文件,并根据输入做一些事情。我已经成功地使用serde_json解析了json。我想让用户做的下一件事是能够指定一些高级选项,但我不知道如何解析输入。默认的json如下所示:
{
value: true
}
解析它可以直接转换成这样的结构:
#[derive(Deserialize)]
pub struct Config {
value: bool
}
我该如何添加选项,以便用户能够输入bool
或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。
发布于 2020-09-19 04:03:52
您没有将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
}
https://stackoverflow.com/questions/63961206
复制相似问题