如何配置 Serde 以使用枚举变体的判别式而不是名称?
How do I configure Serde to use an enum variant's discriminant rather than name?
我正在解析一个使用整数作为枚举数的 INI 样式文件。
#[derive(Debug, Deserialize, Serialize)]
pub enum MyThing {
First = 0,
Second = 1,
Third = 2,
}
在文件中,值将像这样序列化:
thing=0
但是,Serde 默认匹配变体名称而不是判别式。自定义实现 Deserialize
是最干净的方法吗?
Serde 网站有一个 entire example on how to serialize an enum as a number:
[dependencies]
serde = "1.0"
serde_repr = "0.1"
use serde_repr::*;
#[derive(Serialize_repr, Deserialize_repr, PartialEq, Debug)]
#[repr(u8)]
enum SmallPrime {
Two = 2,
Three = 3,
Five = 5,
Seven = 7,
}
fn main() {
use SmallPrime::*;
let nums = vec![Two, Three, Five, Seven];
// Prints [2,3,5,7]
println!("{}", serde_json::to_string(&nums).unwrap());
assert_eq!(Two, serde_json::from_str("2").unwrap());
}
我相信这是最好的方法,因为它是板条箱作者自己推荐的。
我正在解析一个使用整数作为枚举数的 INI 样式文件。
#[derive(Debug, Deserialize, Serialize)]
pub enum MyThing {
First = 0,
Second = 1,
Third = 2,
}
在文件中,值将像这样序列化:
thing=0
但是,Serde 默认匹配变体名称而不是判别式。自定义实现 Deserialize
是最干净的方法吗?
Serde 网站有一个 entire example on how to serialize an enum as a number:
[dependencies] serde = "1.0" serde_repr = "0.1"
use serde_repr::*; #[derive(Serialize_repr, Deserialize_repr, PartialEq, Debug)] #[repr(u8)] enum SmallPrime { Two = 2, Three = 3, Five = 5, Seven = 7, } fn main() { use SmallPrime::*; let nums = vec![Two, Three, Five, Seven]; // Prints [2,3,5,7] println!("{}", serde_json::to_string(&nums).unwrap()); assert_eq!(Two, serde_json::from_str("2").unwrap()); }
我相信这是最好的方法,因为它是板条箱作者自己推荐的。