Struct setting_tracker::Setting
source · 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)
Examples found in repository?
More examples
examples/sharing_state.rs (lines 14-18)
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
fn main() {
let mut settings = Settings::default();
let s = Rc::new("abc".to_string());
{
let mut ss = s.to_string();
settings.str.cb(move |o, n| {
println!("{:?} -> {:?}", o, n);
ss.push_str("...");
println!("{:?} from closure", ss);
});
}
println!("{}", s);
settings.str.set("new".to_string());
println!("{:?}", settings);
}examples/simple.rs (line 14)
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
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);
}examples/more_complex.rs (line 14)
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
fn main() {
let mut settings = Settings::default();
settings.cell.cb(|o, n| println!("{:?} -> {:?}", o, n));
settings.vec.cb(|o, n| println!("{:?} -> {:?}", o, n));
// Field name should be empty by default
println!("name should be empty by default: {:?}", settings.str.get());
// Change Settings struct, user callbacks should be called if they were are assigned
settings.str.set("new_name".to_string());
settings.cell.set(10.into());
settings.cell.set(2222.into());
// Changing Vec elements is a bit more tedious
let mut vec = settings.vec.get();
vec.extend([1, 2, 3, 4]);
settings.vec.set(vec);
println!("{:?}", settings);
}examples/real_world_mpsc.rs (lines 16-19)
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
fn main() {
// Settings
let (sender, receiver) = channel();
let mut settings = Settings::default();
settings.port.cb(move |old, new| {
let old_and_new = (old.clone(), new.clone());
sender.send(old_and_new).unwrap();
});
// Port subscriber
thread::spawn(move || loop {
let port = receiver.recv();
if port.is_ok() {
println!(
"port changed: {:?} -> {:?}",
port.unwrap().0,
port.unwrap().1
);
}
});
// Port publisher
let mut changing_port = 0u16;
loop {
changing_port = changing_port + 1;
settings.port.set(changing_port);
thread::sleep(Duration::from_millis(500));
}
}sourcepub fn set(&mut self, new_val: T)
pub fn set(&mut self, new_val: T)
Examples found in repository?
More examples
examples/sharing_state.rs (line 21)
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
fn main() {
let mut settings = Settings::default();
let s = Rc::new("abc".to_string());
{
let mut ss = s.to_string();
settings.str.cb(move |o, n| {
println!("{:?} -> {:?}", o, n);
ss.push_str("...");
println!("{:?} from closure", ss);
});
}
println!("{}", s);
settings.str.set("new".to_string());
println!("{:?}", settings);
}examples/simple.rs (line 20)
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
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);
}examples/more_complex.rs (line 21)
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
fn main() {
let mut settings = Settings::default();
settings.cell.cb(|o, n| println!("{:?} -> {:?}", o, n));
settings.vec.cb(|o, n| println!("{:?} -> {:?}", o, n));
// Field name should be empty by default
println!("name should be empty by default: {:?}", settings.str.get());
// Change Settings struct, user callbacks should be called if they were are assigned
settings.str.set("new_name".to_string());
settings.cell.set(10.into());
settings.cell.set(2222.into());
// Changing Vec elements is a bit more tedious
let mut vec = settings.vec.get();
vec.extend([1, 2, 3, 4]);
settings.vec.set(vec);
println!("{:?}", settings);
}examples/real_world_mpsc.rs (line 37)
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
fn main() {
// Settings
let (sender, receiver) = channel();
let mut settings = Settings::default();
settings.port.cb(move |old, new| {
let old_and_new = (old.clone(), new.clone());
sender.send(old_and_new).unwrap();
});
// Port subscriber
thread::spawn(move || loop {
let port = receiver.recv();
if port.is_ok() {
println!(
"port changed: {:?} -> {:?}",
port.unwrap().0,
port.unwrap().1
);
}
});
// Port publisher
let mut changing_port = 0u16;
loop {
changing_port = changing_port + 1;
settings.port.set(changing_port);
thread::sleep(Duration::from_millis(500));
}
}sourcepub fn get(&self) -> T
pub fn get(&self) -> T
Examples found in repository?
More examples
examples/more_complex.rs (line 18)
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
fn main() {
let mut settings = Settings::default();
settings.cell.cb(|o, n| println!("{:?} -> {:?}", o, n));
settings.vec.cb(|o, n| println!("{:?} -> {:?}", o, n));
// Field name should be empty by default
println!("name should be empty by default: {:?}", settings.str.get());
// Change Settings struct, user callbacks should be called if they were are assigned
settings.str.set("new_name".to_string());
settings.cell.set(10.into());
settings.cell.set(2222.into());
// Changing Vec elements is a bit more tedious
let mut vec = settings.vec.get();
vec.extend([1, 2, 3, 4]);
settings.vec.set(vec);
println!("{:?}", settings);
}Trait Implementations§
Auto Trait Implementations§
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