more_complex/
more_complex.rs

1use setting_tracker::Setting;
2use std::cell::Cell;
3
4#[derive(Default, Debug)]
5struct Settings {
6    str: Setting<String>,
7    cell: Setting<Cell<u16>>,
8    vec: Setting<Vec<u8>>,
9}
10
11fn main() {
12    let mut settings = Settings::default();
13
14    settings.cell.cb(|o, n| println!("{:?} -> {:?}", o, n));
15    settings.vec.cb(|o, n| println!("{:?} -> {:?}", o, n));
16
17    // Field name should be empty by default
18    println!("name should be empty by default: {:?}", settings.str.get());
19
20    // Change Settings struct, user callbacks should be called if they were are assigned
21    settings.str.set("new_name".to_string());
22    settings.cell.set(10.into());
23    settings.cell.set(2222.into());
24
25    // Changing Vec elements is a bit more tedious
26    let mut vec = settings.vec.get();
27    vec.extend([1, 2, 3, 4]);
28    settings.vec.set(vec);
29
30    println!("{:?}", settings);
31}
32
33/*
34Output:
35    name should be empty by default: ""
36    Cell { value: 0 } -> Cell { value: 10 }
37    Cell { value: 10 } -> Cell { value: 2222 }
38    [] -> [1, 2, 3, 4]
39    Settings { str: "new_name", cell: Cell { value: 2222 }, vec: [1, 2, 3, 4] }
40 */