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 配置
248,958 个月下载量
用于 285 个 Crates (135 直接)
21KB
431 行
envy
将环境变量反序列化为类型安全的结构体
📦 安装
将以下内容添加到您的 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