#setting #utility #tracker #settings #wrapper

no-std setting_tracker

跟踪设置变化的实用类型

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 配置

MIT 许可证

7KB
114

setting_tracker

设置追踪器是一个跟踪您的设置结构体变化的实用类型。程序的其他部分通常只对设置内部特定值的变化感兴趣。这个库通过提供 实用类型 Setting<T> 来尝试实现这一点。

您可以将任何类型包裹在 Setting<T> 中,其中 T 实现了 CloneDefault 特性(推荐使用 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 信号,例如通知其他线程设置已被更改。

示例目录 中查看更复杂的示例。

无运行时依赖