11 个版本

0.4.2 2021年1月4日
0.4.1 2020年1月6日
0.4.0 2019年2月18日
0.3.3 2018年10月22日
0.1.1 2016年7月11日

#5 in 配置

Download history 62408/week @ 2024-04-15 65286/week @ 2024-04-22 59450/week @ 2024-04-29 61258/week @ 2024-05-06 62705/week @ 2024-05-13 61057/week @ 2024-05-20 62374/week @ 2024-05-27 63650/week @ 2024-06-03 59333/week @ 2024-06-10 60938/week @ 2024-06-17 57408/week @ 2024-06-24 53969/week @ 2024-07-01 66280/week @ 2024-07-08 49311/week @ 2024-07-15 62244/week @ 2024-07-22 68865/week @ 2024-07-29

248,958 个月下载量
用于 285 个 Crates (135 直接)

MIT 许可证

21KB
431

envy Github Actions 覆盖率状态 软件许可 最新 API 文档

将环境变量反序列化为类型安全的结构体

📦 安装

将以下内容添加到您的 Cargo.toml 文件中。

[dependencies]
envy = "0.4"

🤸 使用

典型的 envy 使用方法如下。假设您的 rust 程序看起来像这样...

💡 这些示例使用 Serde 的 derive 功能

use serde::Deserialize;

#[derive(Deserialize, Debug)]
struct Config {
  foo: u16,
  bar: bool,
  baz: String,
  boom: Option<u64>
}

fn main() {
    match envy::from_env::<Config>() {
       Ok(config) => println!("{:#?}", config),
       Err(error) => panic!("{:#?}", error)
    }
}

...导出一些环境变量

$ FOO=8080 BAR=true BAZ=hello yourapp

您应该能够访问完全类型安全的从环境变量反序列化的配置结构体。

Envy 假设每个结构体字段都有一个与其名称匹配的环境变量,且全部为大写字母。例如,结构体字段 foo_bar 将映射到名为 FOO_BAR 的环境变量。

具有 Option 类型字段的结构体在相关环境变量不存在时将成功反序列化。

Envy 还支持从逗号分隔的环境变量值反序列化 Vecs

因为 envy 是基于 serde 构建的,所以您可以使用 serde 的所有 属性

例如,假设您的应用程序需要一个字段,但在没有提供时希望有一个合理的默认值。


/// provides default value for zoom if ZOOM env var is not set
fn default_zoom() -> {
  32
}

#[derive(Deserialize, Debug)]
struct Config {
  foo: u16,
  bar: bool,
  baz: String,
  boom: Option<u64>,
  #[serde(default="default_zoom")]
  zoom: u16
}

以下将生成一个缩放为 32 的应用程序配置

$ FOO=8080 BAR=true BAZ=hello yourapp

以下将生成一个缩放为 10 的应用程序配置

$ FOO=8080 BAR=true BAZ=hello ZOOM=10 yourapp

支持使用 envy::prefixed(prefix) 接口来为特定应用添加前缀到环境变量名称的通用模式。假设您的环境变量前缀为 APP_,上面的示例可能看起来像这样:

use serde::Deserialize;

#[derive(Deserialize, Debug)]
struct Config {
  foo: u16,
  bar: bool,
  baz: String,
  boom: Option<u64>
}

fn main() {
    match envy::prefixed("APP_").from_env::<Config>() {
       Ok(config) => println!("{:#?}", config),
       Err(error) => panic!("{:#?}", error)
    }
}

那么预期将会导出前缀为 APP_ 的相同环境变量。

$ APP_FOO=8080 APP_BAR=true APP_BAZ=hello yourapp

👭 将这个crate视为 envy-store 的远亲,一个用于将AWS参数存储值反序列化为类型安全结构体的crate,以及 recap,一个用于将命名正则表达式捕获组反序列化为类型安全结构体的crate。

Doug Tangren (softprops) 2016-2019

依赖项

~110–340KB