3 个版本 (破坏性更新)

0.3.0 2024年1月5日
0.2.0 2023年5月5日
0.1.2 2023年4月29日
0.1.1 2023年4月29日
0.1.0 2023年4月28日

#618 in 配置

MIT/Apache

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