1 个不稳定版本
0.1.0 | 2023年2月7日 |
---|
#669 在 配置
123 每月下载量
9KB
DesEnv-rs
环境变量反序列化库。
使用此库,可以将一组环境变量反序列化为更结构化的数据类型。
安装
# Cargo.toml
[dependencies]
desenv = "0.1.0"
使用方法
该库提供了一个实用函数,用于从环境变量中加载配置
fn main() {
let _config: Config = desenv::load().expect("Failed to load configuration");
}
然后 Config
应该像这样
use desenv::Desenv;
#[derive(Desenv)]
pub struct Config {
field1: String,
field2: String,
}
为了成功加载 Config
,在环境变量中需要两个变量
FIELD1
FIELD2
自定义配置
可以自定义配置的加载方式。
重命名
在 desenv
字段属性上使用 rename
修饰符,可以指示库查找不同的变量。在上面的示例中,在加载配置时,库将尝试查找 FIELD_1
变量。
use desenv::Desenv;
#[derive(Desenv)]
pub struct Config {
#[desenv(rename = "FIELD_1")]
field1: String,
}
请注意,重命名属性是区分大小写的。所以在上面的示例中,库将尝试查找一个名为 downcased_field_1
的环境变量。
use desenv::Desenv;
#[derive(Desenv)]
pub struct Config {
#[desenv(rename = "down_case_field_1")]
field1: String,
}
默认值
使用此修饰符可以指示库反序列化一个带有默认值的环境变量。
带值
如果 FIELD1
环境变量不存在,库将用 value
填充 field1
。
use desenv::Desenv;
#[derive(Desenv)]
pub struct Config {
#[desenv(default = "value")]
field1: String,
}
或
use desenv::Desenv;
#[derive(Desenv)]
pub struct Config {
#[desenv(default(value = "value"))]
field1: String,
}
带环境变量
如果 FIELD1
环境变量不存在,库将尝试作为后备选项加载 FALLBACK_FIELD1
环境变量。如果 FALLBACK_FIELD1
也不存在,则加载将失败。
use desenv::Desenv;
#[derive(Desenv)]
pub struct Config {
#[desenv(default(env = "FALLBACK_FIELD1"))]
field1: String,
}
带标准默认值
如果 FIELD1
环境变量不存在,库将用该类型的 Default
实现填充 field1
。例如,对于字符串,默认值将是一个空字符串。
use desenv::Desenv;
#[derive(Desenv)]
pub struct Config {
#[desenv(default)]
field1: String,
}
分隔符
指示库如何将字符串反序列化为向量,通过对字符串进行 split
操作。提供的值必须是一个字符。不能用于非向量字段。
use desenv::Desenv;
#[derive(Desenv)]
pub struct Config {
#[desenv(separator = ';')]
field1: String,
}
嵌套
通知库不要使用环境变量,而应同时使用 Desenv
宏来反序列化指定的字段。
use desenv::Desenv;
#[derive(Desenv)]
pub struct Config {
#[desenv(nested)]
field1: NestedConfig,
}
#[derive(Desenv)]
pub struct NestedConfig {
field: String,
}
前缀
如果设置,将为每个反序列化的环境变量应用该前缀。在下面的示例中,field1
将反序列化为 PREFIXED_FIELD1
。请注意,前缀是区分大小写的。
use desenv::Desenv;
#[derive(Desenv)]
#[desenv(prefix = "PREFIX_")]
pub struct Config {
field1: String,
}
如果带前缀的结构体有带前缀的嵌套结构体,则结果将是前缀的连接。在示例中,NestedConfig
中的字段将使用 PARENT_NESTED_FIELD
环境变量来解决。
use desenv::Desenv;
#[derive(Desenv)]
#[desenv(prefix = "PARENT_")]
pub struct Config {
#[desenv(nested)]
field1: NestedConfig,
}
#[derive(Desenv)]
#[desenv(prefix = "NESTED_")]
pub struct NestedConfig {
field: String,
}
OsString
在无法以 utf8 编码环境变量的一些特定情况下,支持 OsString
。
use std::ffi::OsString;
use desenv::Desenv;
#[derive(Desenv)]
pub struct Config {
field1: OsString,
}
支持类型
目前,任何混合了 T
的 FromStr
特性的类型都可以用作简单字段。其他支持类型包括
Option<T>
Vec<T>
OsString
依赖项
~1.5MB
~35K SLoC