6 个版本
0.1.1 | 2024 年 1 月 2 日 |
---|---|
0.1.0 | 2022 年 5 月 16 日 |
0.0.5 | 2021 年 7 月 29 日 |
#365 在 配置 中
26KB
677 行
注意:图示仍处于非常早期的开发阶段。请自行承担风险
概述
图示
是一个用于管理 Rust 应用程序配置的 crate。它强调在实际用例中的用户体验
- 配置是
Clone
,并且是集中控制的 - 这允许您将配置传递到应用程序中需要它的任何组件,而无需过于担心 - 默认支持热重载,这在将 Kubernetes ConfigMap 映射为运行时配置的情况下非常有用
- 配置在 "覆盖" 中工作,这意味着默认值和您在上面应用更新的值之间存在分离。这允许您重置值,或者在基础配置重新加载时保留您的更新
入门
图示
配置对象是围绕内部配置值的包装器。默认情况下,此值为 serde_json::Value
,但可以根据需要自定义以适应任何可 Serialize
和 Deserialize
的类型。
配置对象维护它们所持有的配置的 "原始" 状态 - 即在构建之前值的 serde_json 表示形式。通过 set_raw
和 get_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