1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use setting_tracker::Setting;

#[derive(Default, Debug)]
struct Settings {
    port: Setting<u16>,
    domain: Setting<String>,
}

fn main() {
    let mut settings = Settings::default();
    // Register callbacks for value changes
    settings
        .domain
        .cb(|o, n| println!("domain: {:?} -> {:?}", o, n));
    settings
        .port
        .cb(|o, n| println!("port: {:?} -> {:?}", o, n));
    // Set new values, callbacks are now invoked when setting is changed
    println!("{:?}", settings);
    settings.domain.set("127.0.0.1".to_string());
    settings.port.set(1337);
    println!("{:?}", settings);
}

/*
Output:
    Settings { port: 0, domain: "" }
    domain: "" -> "127.0.0.1"
    port: 0 -> 1337
    Settings { port: 1337, domain: "127.0.0.1" }
 */