setting_tracker
Setting tracker is a utility type for tracking changes in your settings struct. Other parts of the program are usually only interested when a specific value changes inside settings. This library tries to help achieving that by providing utility type Setting<T>
.
You can wrap any type inside Setting<T>
where T
implements Clone
and Default
traits (Debug
is highly recommended but not enforced).
As a made up example, first define our Settings
struct (which is not part of this library):
use Setting;
User can now register callbacks when a specific setting changes:
let mut settings = default; // equivalent of `Settings { port: 0, domain: "".to_string() }`
settings.port.cb;
Setting can now be changed through the set
member function:
settings.port.set;
settings.port.set;
Get the value by cloning:
let _ = settings.domain.get;
Get the value as reference, when cloning is considered too expensive:
let _ = settings.domain.as_ref;
Outputs:
port: 0 -> 1
port: 1 -> 10
Run the README.md example and see it yourself:
Why?
This is useful pattern when individual setting change needs to be tracked. The simple example above just prints setting changes, but more useful pattern would be to use pub/sub signaling for example to other threads that a setting has been changed.
See more complex examples in example directory.