Simple Observable
This simple library is made to notify you when your data changes
Adding a dependency: simple-observable = "0.1.1"
Base usage example
use simple_observable::Observable;
fn main() {
let mut observable = Observable::new(10);
observable.add_listener(my_listener1);
observable.add_listener(my_listener2);
observable.set(17);
}
fn my_listener1(new_value: &i32) {
println!("New value from listener 1: {}", new_value);
}
fn my_listener2(new_value: &i32) {
println!("New value from listener 2: {}", new_value);
}
It is important to understand that for data that does not implement the Copy trait, the Observable becomes the owner. Also listeners can only get read refs.
Changing observed values
use simple_observable::Observable;
fn main() {
let data = vec![1, 2, 3];
let mut observable = Observable::new(data);
observable.add_listener(my_listener1);
observable.add_listener(my_listener2);
(*observable).push(4);
observable.notify();
}
fn my_listener1(new_value: &Vec<i32>) {
println!("New value from listener 1: {:?}", new_value);
}
fn my_listener2(new_value: &Vec<i32>) {
println!("New value from listener 2: {:?}", new_value);
}
Observable
is a pointer that can be dereferenced and the data can be accessed directly. However, when they change, there will be no automatic notification, you need to call notify()
manually