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日 |
#167 in #环境变量
每月179次下载
用于env-settings
39KB
509 行
环境设置
环境设置是一个Rust库,帮助您使用环境变量初始化结构体
此Rust库受到了
pydantic
的BaseSettings
Python类的启发
安装
cargo add env-settings env-settings-derive env-settings-utils
用法
当您将EnvSettings
派生到结构体中时,会为其添加两个公共方法
-
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 许可证的约束。
依赖项
~335–800KB
~19K SLoC