1 个稳定版本

1.0.0 2022年9月9日

#798配置

每月 21 次下载

Apache-2.0 许可

29KB
528 代码行

Rust 动态配置器

Tests codecov

动态配置库很简单:它接受任意 YAML 文件,将其解析为通用格式,并返回一个包含配置及其键的 hashmap。它还支持环境加载。

例如以下内容

database:
  name: null
  username: null
  password: null
  port: null
logging:
  level: "INFO"
performance:
  threads: 8

以下规则将用于将 YAML 文件解析为 hashmap

  1. 键将根据层次结构递归命名。在上面的例子中,一个键将是 DATABASE_USERNAME
  2. 如果键是 null,则将使用(1)中描述的层次结构名称在环境中搜索。
  3. 如果键有值,则行为由 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