pub struct Setting<T> { /* private fields */ }Implementations§
Source§impl<T> Setting<T>
impl<T> Setting<T>
Sourcepub fn cb(&mut self, f: impl FnMut(&T, &T) + 'static)
pub fn cb(&mut self, f: impl FnMut(&T, &T) + 'static)
Set a callback, guaranteed to be called every time inner value changes
Examples found in repository?
More examples
examples/sharing_state.rs (lines 14-18)
9fn main() {
10 let mut settings = Settings::default();
11 let s = Rc::new("abc".to_string());
12 {
13 let mut ss = s.to_string();
14 settings.str.cb(move |o, n| {
15 println!("{:?} -> {:?}", o, n);
16 ss.push_str("...");
17 println!("{:?} from closure", ss);
18 });
19 }
20 println!("{}", s);
21 settings.str.set("new".to_string());
22 println!("{:?}", settings);
23}examples/simple.rs (line 14)
9fn main() {
10 let mut settings = Settings::default();
11 // Register callbacks for value changes
12 settings
13 .domain
14 .cb(|o, n| println!("domain: {:?} -> {:?}", o, n));
15 settings
16 .port
17 .cb(|o, n| println!("port: {:?} -> {:?}", o, n));
18 // Set new values, callbacks are now invoked when setting is changed
19 println!("{:?}", settings);
20 settings.domain.set("127.0.0.1".to_string());
21 settings.port.set(1337);
22 println!("{:?}", settings);
23}examples/more_complex.rs (line 14)
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}examples/real_world_mpsc.rs (lines 16-19)
12fn main() {
13 // Settings
14 let (sender, receiver) = channel();
15 let mut settings = Settings::default();
16 settings.port.cb(move |old, new| {
17 let old_and_new = (old.clone(), new.clone());
18 sender.send(old_and_new).unwrap();
19 });
20
21 // Port subscriber
22 thread::spawn(move || loop {
23 let port = receiver.recv();
24 if port.is_ok() {
25 println!(
26 "port changed: {:?} -> {:?}",
27 port.unwrap().0,
28 port.unwrap().1
29 );
30 }
31 });
32
33 // Port publisher
34 let mut changing_port = 0u16;
35 loop {
36 changing_port = changing_port + 1;
37 settings.port.set(changing_port);
38 thread::sleep(Duration::from_millis(500));
39 }
40}Sourcepub fn set(&mut self, new_val: T)
pub fn set(&mut self, new_val: T)
Set value
Examples found in repository?
More examples
examples/sharing_state.rs (line 21)
9fn main() {
10 let mut settings = Settings::default();
11 let s = Rc::new("abc".to_string());
12 {
13 let mut ss = s.to_string();
14 settings.str.cb(move |o, n| {
15 println!("{:?} -> {:?}", o, n);
16 ss.push_str("...");
17 println!("{:?} from closure", ss);
18 });
19 }
20 println!("{}", s);
21 settings.str.set("new".to_string());
22 println!("{:?}", settings);
23}examples/simple.rs (line 20)
9fn main() {
10 let mut settings = Settings::default();
11 // Register callbacks for value changes
12 settings
13 .domain
14 .cb(|o, n| println!("domain: {:?} -> {:?}", o, n));
15 settings
16 .port
17 .cb(|o, n| println!("port: {:?} -> {:?}", o, n));
18 // Set new values, callbacks are now invoked when setting is changed
19 println!("{:?}", settings);
20 settings.domain.set("127.0.0.1".to_string());
21 settings.port.set(1337);
22 println!("{:?}", settings);
23}examples/more_complex.rs (line 21)
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}examples/real_world_mpsc.rs (line 37)
12fn main() {
13 // Settings
14 let (sender, receiver) = channel();
15 let mut settings = Settings::default();
16 settings.port.cb(move |old, new| {
17 let old_and_new = (old.clone(), new.clone());
18 sender.send(old_and_new).unwrap();
19 });
20
21 // Port subscriber
22 thread::spawn(move || loop {
23 let port = receiver.recv();
24 if port.is_ok() {
25 println!(
26 "port changed: {:?} -> {:?}",
27 port.unwrap().0,
28 port.unwrap().1
29 );
30 }
31 });
32
33 // Port publisher
34 let mut changing_port = 0u16;
35 loop {
36 changing_port = changing_port + 1;
37 settings.port.set(changing_port);
38 thread::sleep(Duration::from_millis(500));
39 }
40}Sourcepub fn get(&self) -> T
pub fn get(&self) -> T
Get value by cloning
Examples found in repository?
More examples
examples/more_complex.rs (line 18)
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}Trait Implementations§
Auto Trait Implementations§
impl<T> Freeze for Setting<T>where
T: Freeze,
impl<T> !RefUnwindSafe for Setting<T>
impl<T> !Send for Setting<T>
impl<T> !Sync for Setting<T>
impl<T> Unpin for Setting<T>where
T: Unpin,
impl<T> !UnwindSafe for Setting<T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more