3 个版本 (破坏性更新)
0.3.0 | 2024年1月5日 |
---|---|
0.2.0 | 2023年5月5日 |
0.1.2 | 2023年4月29日 |
0.1.1 |
|
0.1.0 |
|
#618 in 配置
20KB
381 行
基于宏的配置管理 crate。
描述
该 crate 和它的姐妹 crate micronfig_macros
结合起来提供 config
宏,允许开发者将应用所需的所有配置变量定义在一个地方,并将它们展开为所需类型的静态引用。
micronfig::config! {
DATABASE_URI,
APPLICATION_NAME: String,
MAX_CONCURRENT_USERS: String > u64,
SHOWN_ALERT?,
}
示例
字符串配置
要定义返回字符串的配置变量,创建一个 config
块,并用逗号分隔它们的名称 ,
micronfig::config! {
VARIABLE_A,
VARIABLE_B,
VARIABLE_C,
PATH,
}
要访问它们,就像调用函数一样调用它们的名称
#
#
// These will all return `&'static str` values.
println!("{}", VARIABLE_A());
println!("{}", VARIABLE_B());
println!("{}", VARIABLE_C());
println!("{}", PATH());
注意
config
块及其定义的变量都是在第一次调用时懒加载的。第一次调用这些函数之一时,将解析配置文件,第一次调用每个函数时,将检索并存储其值。
必需和可选变量
默认情况下,配置变量都是必需的,如果它们在第一次调用其函数时值缺失,则会导致 [panic]。
可以通过在名称后添加一个问号 ?
将配置变量标记为 [可选] 的,使它们返回一个 &'static
Option
micronfig::config! {
VARIABLE_REQUIRED,
VARIABLE_OPTIONAL?,
}
转换
所有变量都作为字符串从其源读取;因此,支持以下显式定义语法
micronfig::config! {
VARIABLE_A: String,
VARIABLE_B: String,
VARIABLE_C: String,
}
字符串在大多数情况下都不是最佳选择,因此 crate 使用一些特质来允许它们转换为不同类型
特质 | 符号 | 注意 |
---|---|---|
来自 |
-> |
|
TryFrom |
=> |
如果转换失败,则会导致 panic。 |
std::str::FromStr |
> |
如果解析失败,则会导致 panic。 |
转换的语法如下
micronfig::config! {
// use FromStr to parse the String as an isize
REQUIRED_SIGNED: String > isize,
// use FromStr to parse the String as a SocketAddr
REQUIRED_SOCKETADDR: String > std::net::SocketAddr,
// use From to convert the String to... another String
REQUIRED_STRING: String -> String,
// use TryFrom to convert the String to another String
// (there aren't many types in std to make valid examples from!)
REQUIRED_TRYSTRING: String => String,
// the conversion will not be performed for missing optional variables
OPTIONAL_UNSIGNED?: String > usize,
}
警告
类型应该是完全限定的,否则宏可能无法正常工作!
也可以使用自定义类型
struct Duplicator {
copy_a: String,
copy_b: String,
}
impl From<String> for Duplicator {
fn from(value: String) -> Self {
Self {
copy_a: value.clone(),
copy_b: value
}
}
}
micronfig::config! {
MY_CUSTOM_TYPE: String -> crate::Duplicator,
}
转换也可以链式调用
struct ChatId(u64);
impl From<u64> for ChatId {
fn from(value: u64) -> Self {
Self(value)
}
}
micronfig::config! {
// First parse the string as an u64 with FromStr, then convert it to a ChatId with From.
RESPOND_TO_MESSAGES_IN: String > u64 -> crate::ChatId,
}
Crate功能
值来源
该Crate支持根据应用程序的需求从各种不同的来源检索值。
可以通过Crate功能开启和关闭来源,以下表格按检索优先级列出,其中最上方的是首先检查的第一个来源,后续的来源只有在上方没有检测到值时才会检查。
功能 | 描述 | 用例 |
---|---|---|
envfiles |
由环境变量{NAME}_FILE 指示的文件路径的内容。 |
Docker 配置和机密。 |
envvars |
环境变量{NAME} 。 |
大多数命令行应用程序。 |
envdot |
当前工作目录中的.env 和.env.local 文件。 |
应用程序开发。 |
默认情况下,所有这些都被启用。
依赖
~0.3–1.2MB
~26K SLoC