28 个版本
| 0.9.2 | 2024年5月26日 |
|---|---|
| 0.9.0 |
|
| 0.7.3 | 2023年7月18日 |
| 0.5.0 | 2023年3月17日 |
| 0.1.0 | 2022年12月25日 |
#184 在 配置
每月208 次下载
120KB
2K SLoC
config-it
Rust 的异步集中式配置管理
config-it 是一个异步库,为 Rust 应用程序提供集中式配置管理。以下是其关键特性:
- 使用结构体定义自定义配置模板。
- 基于单个模板创建具有不同路径的多个实例。
- 当您的实例更新时接收通知。
- 使用与
serde兼容的存档格式以您首选的方式存档您的数据。 - 管理属性级脏标志,以实现系统精确、响应式的更新。
由于我英语写作能力不强,所以借助 AI 辅助编写了此 README 文件。谢谢,机器人!
用法
- 查看 示例
lib.rs:
异步集中式配置管理的 crate。
用法
您可以定义 'Template',它定义了一组应一次性更新的属性。只有被 config_it 装饰的属性才会被计算为给定组的一部分,并会被管理。
Template 必须实现 Clone 特性。
您应创建 Storage 来创建配置组实例(Group<T:Template>)。Storage 是集中式配置管理的首要演员。可以根据存储实例实例化配置组。
任何实现 serde::Serialize 和 serde::DeserializeOwned 的属性都可以用作配置属性。
属性
任何带有属性 #[config_it] 或 #[config] 装饰的字段将被视为配置属性。您可以通过在括号内添加额外的属性来指定属性的额外约束。
默认= <值>- 指定属性的默认值。在将表达式转换为字段类型时使用
.try_into().unwrap()表达式时,您应该在这里指定不可失败的表达式。这是为了支持从&str到String或类似的所有权转换的便捷值提升。
- 指定属性的默认值。在将表达式转换为字段类型时使用
default_expr= "<expr>"- 在此处指定复杂的值表达式。要在此处指定字符串字面量,必须使用反斜杠(
\)转义双引号(")。由于此属性直接将给定的表达式转换为令牌树,因此您可以在此处编写任何有效的Rust表达式。
- 在此处指定复杂的值表达式。要在此处指定字符串字面量,必须使用反斜杠(
rename= "<alias>"- 指定属性的别名。当您想在配置文件中使用不同的属性名称,但在代码中想要使用原始名称时,这很有用。
one_of= [<值>, <值>, ...]- 指定属性允许的值的集合。当您想将属性的值限制为特定值集合时,这很有用。您还可以将默认值指定为允许的值之一。
- 默认值可能不在允许的集合中,也可以从允许的集合中排除。在这种情况下,将值设置回默认值将不允许。
min = <value>,max=<value>- 将属性的值限制在给定的范围内。任何实现了
Ord的类型都可以有最小/最大约束。
- 将属性的值限制在给定的范围内。任何实现了
env = "<env_var>"或env_once = "<env_var>"- 指定要从其中导入值的环境变量名称。如果未设置环境变量,则将使用默认值。使用
TryParse特性将环境变量值转换为属性类型。 env_once只在创建后懒加载一次并重用缓存的值。
- 指定要从其中导入值的环境变量名称。如果未设置环境变量,则将使用默认值。使用
no_import- 不要从导入的存档中更新值。当与
env标志混用时,即使存档已导入,其值也将保持为导入的环境变量。
- 不要从导入的存档中更新值。当与
no_export- 不要将值导出到存档。
transient- 值不会被存档,也不会从存档中导入。
hidden- 向监控系统提示,此属性不应可见。
no_notify
非默认值
存储模板可能包含多个非配置字段。由于 Template 宏不需要实现 Default 特性,如果非配置类型没有提供类型级别的默认实现,它将报告错误。
#[derive(config_it::Template, Clone)]
struct Config {
#[config(default = 154)]
pub any_number: i32,
// This is just okay.
pub non_config_with_default: usize,
pub non_config_number: std::num::NonZeroUsize,
// ^^^ the trait `Default` is not implemented for `NonZeroUsize`
}
在这种情况下,您可以通过 non_config_default_expr 属性为字段指定非默认值。此属性接受字符串字面量,它将被解析为Rust表达式。
#[derive(config_it::Template, Clone)]
struct Config {
#[config(default = 154)]
pub any_number: i32,
#[non_config_default_expr = r#"1.try_into().unwrap()"#]
pub non_config_number: std::num::NonZeroUsize,
}
依赖关系
~2–11MB
~111K SLoC