created_at2024-01-21 00:21:46.333523
updated_at2024-03-10 15:33:55.552904
descriptionUtility type for tracking setting changes



# 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`. You can wrap any type inside `Setting` 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): ```rust use setting_tracker::Setting; #[derive(Default, Debug)] struct Settings { port: Setting, domain: Setting, } ``` User can now register callbacks when a specific setting changes: ```rust let mut settings = Settings::default(); // equivalent of `Settings { port: 0, domain: "".to_string() }` settings.port.cb(|old, new| println!("port: {:?} -> {:?}", old, new)); ``` Setting can now be changed through the `set` member function: ```rust settings.port.set(1); settings.port.set(10); ``` Get the value by cloning: ```rust let _ = settings.domain.get(); ``` Get the value as reference, when cloning is considered too expensive: ```rust let _ = settings.domain.as_ref(); ``` Outputs: ``` port: 0 -> 1 port: 1 -> 10 ``` Run the example and see it yourself: ```sh cargo run --example readme ``` ### 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](
Commit count: 0

cargo fmt