4 个版本
0.1.3 | 2024 年 3 月 10 日 |
---|---|
0.1.2 | 2024 年 2 月 6 日 |
0.1.1 | 2024 年 1 月 25 日 |
0.1.0 | 2024 年 1 月 21 日 |
#209 in 配置
7KB
114 行
setting_tracker
设置追踪器是一个跟踪您的设置结构体变化的实用类型。程序的其他部分通常只对设置内部特定值的变化感兴趣。这个库通过提供 实用类型 Setting<T>
来尝试实现这一点。
您可以将任何类型包裹在 Setting<T>
中,其中 T
实现了 Clone
和 Default
特性(推荐使用 Debug
,但不是强制的)。
作为一个示例,首先定义我们的 Settings
结构体(这不是这个库的一部分)
use setting_tracker::Setting;
#[derive(Default, Debug)]
struct Settings {
port: Setting<u16>,
domain: Setting<String>,
}
当特定设置更改时,用户现在可以注册回调
let mut settings = Settings::default(); // equivalent of `Settings { port: 0, domain: "".to_string() }`
settings.port.cb(|old, new| println!("port: {:?} -> {:?}", old, new));
可以通过 set
成员函数来更改设置
settings.port.set(1);
settings.port.set(10);
通过克隆来获取值
let _ = settings.domain.get();
当克隆被认为太昂贵时,可以通过引用获取值
let _ = settings.domain.as_ref();
输出
port: 0 -> 1
port: 1 -> 10
运行 README.md 示例并亲自查看
cargo run --example readme
为什么?
当需要跟踪单个设置更改时,这是一个有用的模式。上面的简单示例只是打印设置更改,但更有用的模式可能是使用 pub/sub 信号,例如通知其他线程设置已被更改。
在 示例目录 中查看更复杂的示例。