1个不稳定版本
0.1.0 | 2024年1月17日 |
---|
#1255 in 编码
9KB
196 行
Enable<T>
是一个包装器,当使用 Serde
序列化 T
时,它添加一个额外的字段 enabled
。该字段可以是 true
,在这种情况下,T
的所有字段都需要存在,或者它可以是一个 false
,这时可以省略 T
的所有字段。
该用例是用于配置YAML文件,其中可以切换部分的开启或关闭。
use serde::{Deserialize, Serialize};
use serde_enabled::Enable;
#[derive(Deserialize, Serialize, Debug, PartialEq, Eq)]
struct Outside {
inside: Enable<Inside>,
}
#[derive(Deserialize, Serialize, Debug, PartialEq, Eq)]
struct Inside {
thing: u32,
other: String,
}
let raw = indoc::indoc! {r#"
inside:
enable: false
thing: 1
other: "Great"
"#};
let o: Outside = serde_yaml::from_str(raw).unwrap();
assert!(!o.inside.is_enabled());
let raw = indoc::indoc! {r#"
inside:
enable: true
thing: 1
other: "Great"
"#};
let o: Outside = serde_yaml::from_str(raw).unwrap();
assert!(o.inside.is_enabled());
assert_eq!(
o,
Outside {
inside: Enable::On(Inside {
thing: 1,
other: "Great".into()
})
}
);
依赖关系
~0.4–1MB
~22K SLoC