5个不稳定版本
0.3.2 | 2023年11月7日 |
---|---|
0.3.1 |
|
0.2.0 | 2023年10月30日 |
0.1.4 | 2023年10月28日 |
#663 in 编码
29KB
258 行
serde-env-field
此包提供能够从具有环境变量展开的字符串中反序列化类型 EnvField<T>
的类型。
在反序列化过程中,EnvField
将尝试将数据作为字符串进行反序列化,并展开所有环境变量。展开后,得到的字符串将用于构建 T
值。默认情况下,EnvField
将使用 FromStr
特性来构建 T
值。但是,可以使用 UseDeserialize 标记使其使用 Deserialize
特性。
如果提供的数据不是字符串,则 EnvField
将尝试直接从数据中反序列化类型 T
。
EnvField
与 Option
、Vec
以及 #[serde(default)]
一起使用效果很好。
此外,该包还提供了 env_field_wrap 属性,该属性将结构体或枚举的所有字段包装为 EnvField
类型。该属性还尊重可选和向量字段。
EnvField
示例
#[derive(Serialize, Deserialize)]
struct Example {
name: EnvField<String>,
size: EnvField<usize>,
num: EnvField<i32>,
}
std::env::set_var("SIZE", "100");
let de: Example = toml::from_str(r#"
name = "${NAME:-Default Name}"
size = "$SIZE"
num = 42
"#).unwrap();
assert_eq!(&de.name, "Default Name");
assert_eq!(de.size, 100);
assert_eq!(de.num, 42);
env_field_wrap
示例
#[env_field_wrap]
#[derive(Serialize, Deserialize)]
struct Example {
name: String,
size: usize,
num: i32,
}
std::env::set_var("SIZE", "100");
let de: Example = toml::from_str(r#"
name = "${NAME:-Default Name}"
size = "$SIZE"
num = 42
"#).unwrap();
assert_eq!(&de.name, "Default Name");
assert_eq!(de.size, 100);
assert_eq!(de.num, 42);
有关 EnvField 和 env_field_wrap 的详细信息,请参阅文档。
依赖项
~0.7–1.3MB
~29K SLoC