6 个版本

0.1.1 2024 年 1 月 2 日
0.1.0 2022 年 5 月 16 日
0.0.5 2021 年 7 月 29 日

#365配置

Apache-2.0

26KB
677

注意:图示仍处于非常早期的开发阶段。请自行承担风险

概述

图示 是一个用于管理 Rust 应用程序配置的 crate。它强调在实际用例中的用户体验

  1. 配置是 Clone,并且是集中控制的 - 这允许您将配置传递到应用程序中需要它的任何组件,而无需过于担心
  2. 默认支持热重载,这在将 Kubernetes ConfigMap 映射为运行时配置的情况下非常有用
  3. 配置在 "覆盖" 中工作,这意味着默认值和您在上面应用更新的值之间存在分离。这允许您重置值,或者在基础配置重新加载时保留您的更新

入门

图示 配置对象是围绕内部配置值的包装器。默认情况下,此值为 serde_json::Value,但可以根据需要自定义以适应任何可 SerializeDeserialize 的类型。

配置对象维护它们所持有的配置的 "原始" 状态 - 即在构建之前值的 serde_json 表示形式。通过 set_rawget_raw 操作来操作这些数据

use figure::Config;

let cfg = Config::empty();
cfg.set_raw("x", 2u32).unwrap();
let value: u32 = cfg.get_raw("x").unwrap();
assert_eq!(value, 2);

更有用的用例包括创建用于存储 "构建" 配置值的自定义类型。在这种情况下,通过 get() 获取 "构建" 配置值,并通过 modify() 进行修改更有意义

use figure::Config;

#[derive(serde::Deserialize, serde::Serialize, Default)]
struct MyConfig {
    value: u32,
}


let cfg = Config::<MyConfig>::new_with_default().unwrap();
let value = cfg.get().value;
assert_eq!(value, 0);
cfg.set_raw("value", 2u32);
let value = cfg.get().value;
assert_eq!(value, 2);

依赖

~6–18MB
~278K SLoC