我有一个枚举类型,它由其他枚举类型组成,类似于以下内容(为简洁起见省略了Serde导出和注释):
我希望能够使用
enum Main {
A(SubA),
B(SubB),
}
enum SubA { X1, X2, X3 }
enum SubB { Y1, Y2, Y3 }
我希望能够使用
serde
来反序列化类似"X1"或"Y3"的字符串,并自动获取相应的Main::A(SubA::X1)
或Main::B(SubB::Y3)
。我知道serde
支持在新类型样式结构上使用#[serde(transparent)]
属性,这样就可以实现我想要的效果。但是,它似乎只能在结构体或枚举层面上工作,而不能在枚举变体层面上工作。是否有一种方法可以自动获得我所需的行为?我可以确保任何包含子枚举的变量名称都不会重叠。除了想保持Rust 2018稳定之外,我的项目没有其他限制,我愿意接受任何可以帮助我完成目标的建议。
X1
,则输出应为Main::A (SubA::X1)
,如果输入是Y3
,则输出应为Main::B (SubB::Y3)
... - Jmbserde
是否可以直接实现这个功能,因为当你有一个枚举类型在不同的变量中持有相同的类型时(例如enum Main{A(SubA), B(SubA)}
),这似乎很难做到。那么X1
应该反序列化成什么呢?(如果SubA
和SubB
都包含一个变量X1
,则会出现类似的问题。) - phimuemue