1 个稳定版本
1.0.0 | 2022年9月9日 |
---|
#798 在 配置
每月 21 次下载
29KB
528 代码行
Rust 动态配置器
动态配置库很简单:它接受任意 YAML 文件,将其解析为通用格式,并返回一个包含配置及其键的 hashmap。它还支持环境加载。
例如以下内容
database:
name: null
username: null
password: null
port: null
logging:
level: "INFO"
performance:
threads: 8
以下规则将用于将 YAML 文件解析为 hashmap
- 键将根据层次结构递归命名。在上面的例子中,一个键将是
DATABASE_USERNAME
。 - 如果键是
null
,则将使用(1)中描述的层次结构名称在环境中搜索。 - 如果键有值,则行为由
load
函数的preference
参数决定。如果提供Preference::PreferEnv
,则所有情况下都将采用环境值,如(2)。如果环境值不可用,它将使用 YAML 文件的给定键值。如果提供Preference::PreferYaml
,则它将始终采用 YAML 文件。
注意
解析器目前不支持数组。
YAML 解析器是递归的。因此,可以处理的嵌套深度受到栈大小的限制。
示例
使用环境优先级加载文件
use yaml_config::Preference;
use yaml_config::load;
let configuration = load("path/to/yaml/file.yaml",
Some(Preference::PreferEnv))?;
使用 YAML 优先级加载文件
use yaml_config::Preference;
use yaml_config::load;
let configuration = load("path/to/yaml/file.yaml",
Some(Preference::PreferYaml))?;
或
use yaml_config::load;
let configuration = load("path/to/yaml/file.yaml", None)?;
访问值
值存储在表示类型的枚举中。
use yaml_config::load;
let configuration = load("path/to/yaml/file.yaml", None)?;
let val = *config["TEST_ENVIRONMENT_VARIABLE"].as_i64().unwrap();
由于 Rust 的严格类型,您将负责事先知道哪些内容可以填充您的变量。即使这里展示了 unwrap
,但强烈建议您使用 match
来补偿。
依赖关系
~3MB
~58K SLoC