#env-var #variables #environment #serde #env #proc-macro #serde-default

serde-env-field

用于环境变量展开的serde反序列化辅助工具

5个不稳定版本

0.3.2 2023年11月7日
0.3.1 2023年11月6日
0.2.0 2023年10月30日
0.1.4 2023年10月28日

#663 in 编码

MIT 协议

29KB
258

serde-env-field

CI

此包提供能够从具有环境变量展开的字符串中反序列化类型 EnvField<T> 的类型。

在反序列化过程中,EnvField 将尝试将数据作为字符串进行反序列化,并展开所有环境变量。展开后,得到的字符串将用于构建 T 值。默认情况下,EnvField 将使用 FromStr 特性来构建 T 值。但是,可以使用 UseDeserialize 标记使其使用 Deserialize 特性。

如果提供的数据不是字符串,则 EnvField 将尝试直接从数据中反序列化类型 T

EnvFieldOptionVec 以及 #[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);

有关 EnvFieldenv_field_wrap 的详细信息,请参阅文档。

依赖项

~0.7–1.3MB
~29K SLoC