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