11个版本
0.1.11 | 2024年2月20日 |
---|---|
0.1.10 | 2024年2月19日 |
0.1.9 | 2023年12月13日 |
0.1.7 | 2023年9月19日 |
0.1.1 | 2023年7月29日 |
#20 in #env-variables
每月下载量 82
用于 2 crates
13KB
105 行
环境设置
环境设置 是一个Rust库,帮助您使用环境变量初始化结构体
这个Rust库受到了
pydantic's BaseSettings
Python类的启发
安装
cargo add env-settings env-settings-derive env-settings-utils
用法
当您将 EnvSettings
derive 添加到结构体时,会为其添加两个公共方法
-
fn from_env(...) -> env_settings_utils::EnvSettingsResult<Self>
仅使用环境变量创建一个新的实例。必须传递跳过的字段。如果出现问题,则返回一个
env_settings_utils::EnvSettingsError
错误 -
fn new(...) -> env_settings_utils::EnvSettingsResult<Self>
使用环境变量和参数的组合创建一个新的实例。更详细地说,可以通过
Option
对象传递可以由环境变量初始化的每个字段。然后如果参数是Some
,则使用它,否则从环境变量中恢复值。必须传递跳过的字段。如果出现问题,则返回一个env_settings_utils::EnvSettingsError
错误
基本
export name=paolo
export favourite_number=42
use env_settings_derive::EnvSettings;
#[derive(EnvSettings)]
struct MyStruct {
name: String,
favourite_number: u8,
}
fn main() {
let my_struct = MyStruct::from_env().unwrap();
assert_eq!(my_struct.name, "paolo".to_string());
assert_eq!(my_struct.favourite_number, 42);
let name = "luca";
let my_struct = MyStruct::new(Some(name.to_string()), None).unwrap();
assert_eq!(my_struct.name, name);
assert_eq!(my_struct.favourite_number, 42);
}
高级
echo "MY_STRUCT_FAVOURITE_NUMBER=42\n" > .env
export MY_BIRTH_DATE=01/01/1970
use env_settings_derive::EnvSettings;
#[derive(EnvSettings)]
#[env_settings(case_insensitive, file_path = ".env", prefix="MY_STRUCT_")]
struct MyStruct {
#[env_settings(default = "paolo")]
name: String,
favourite_number: u8,
#[env_settings(variable = "MY_BIRTH_DATE")]
birth_date: String,
birth_place: Option<String>,
#[env_settings(skip)]
friends: Vec<String>,
}
fn main() {
let friends = vec!["luca".to_string()];
let my_struct = MyStruct::from_env(friends.clone()).unwrap();
assert_eq!(my_struct.name, "paolo".to_string());
assert_eq!(my_struct.favourite_number, 42);
assert_eq!(my_struct.birth_date, "01/01/1970");
assert_eq!(my_struct.birth_place, None);
assert_eq!(my_struct.friends, friends);
let name = "luca";
let my_struct = MyStruct::new(
Some(name.to_string()),
None,
None,
Some("london".to_string()),
friends.clone(),
).unwrap();
assert_eq!(my_struct.name, name);
assert_eq!(my_struct.favourite_number, 42);
assert_eq!(my_struct.birth_date, "01/01/1970");
assert_eq!(my_struct.birth_place, Some("london".to_string()));
assert_eq!(my_struct.friends, friends);
}
参数
结构体
当前支持的结构体参数为
case_insensitive
:是否对环境变量匹配应忽略大小写。默认情况下,匹配是区分大小写的。delay
:是否将环境变量的查找从编译时间延迟到运行时间。默认情况下,在编译时执行查找file_path
:读取以添加一些环境变量的文件路径(例如.env
)。默认情况下,未设置prefix
:在匹配环境变量之前添加到结构体字段名称的前缀。默认情况下,未设置
字段
当前支持的字段参数为
default
:如果未找到环境变量时使用的默认值。默认情况下,未设置skip
:是否跳过环境变量的解析。如果指定的类型未实现std::str::FromStr
,则是必要的。variable
:用于查找的环境变量。默认情况下,字段名称
变量解析层次结构
- 传递给
new
方法的参数(如果使用new
)。 - 环境变量
- 从文件中加载的变量(例如
.env
) - 默认值
贡献
在开始贡献工作之前,请阅读
运行测试
测试时运行
cargo test -- --test-threads=1
以防止测试相互竞争同一文件
许可协议
本项目的许可协议为 MIT 或 Apache 2.0 许可协议。
依赖项
~325–780KB
~18K SLoC