Crates.io | reactivate |
lib.rs | reactivate |
version | 0.4.2 |
source | src |
created_at | 2023-07-17 10:44:54.512651 |
updated_at | 2024-03-25 17:58:27.56496 |
description | Thread Safe Reactive Data Structure. Made with โค๏ธ for ๐ฆ |
homepage | |
repository | https://github.com/zahash/reactivate |
max_upload_size | |
id | 918389 |
size | 37,016 |
โโโโโโโ โโโโโโโโ โโโโโโ โโโโโโโโโโโโโโโโโโโโโโ โโโ โโโโโโ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโ โโโโโโโโโโโ โโโ โโโโโโ โโโโโโโโโโโ โโโ โโโโโโ โโโโโโโโโโโโโโ โโโโโโโโโโโ โโโ โโโโโโโ โโโโโโโโโโโโ โโโ โโโโโโ โโโ โโโโโโโโโโโโโโ โโโโโโโโโโโ โโโ โโโ โโโโโโโ โโโ โโโ โโโ โโโโโโโโ โโโ โโโโโโโโโโโโโโ โโโ โโโโโโโ โโโ โโโ โโโโโ โโโ โโโ โโโ โโโโโโโโ ------------------------------------------------------------------------------ Thread Safe Reactive Data Structure. Made with โค๏ธ for ๐ฆ
include it in your Cargo.toml
under [dependencies]
reactivate = { version = "*", features = ["threadsafe"] }
use reactivate::Reactive;
fn main() {
let r = Reactive::new(10);
println!("{:?}", r); // Reactive(10)
println!("{:?}", r.value()); // 10
}
use reactivate::Reactive;
fn main() {
let r = Reactive::new(10);
let d = r.derive(|val| val + 5);
println!("{:?}", r); // Reactive(10)
println!("{:?}", d); // Reactive(15)
}
use reactivate::Reactive;
fn main() {
let r = Reactive::new(10);
let d = r.derive(|val| val + 5);
r.update(|_| 20);
println!("{:?}", r); // Reactive(20)
println!("{:?}", d); // Reactive(25)
}
use reactivate::Reactive;
fn main() {
let r = Reactive::new(vec![1, 2, 3]);
let d = r.derive(|nums| nums.iter().sum::<i32>());
r.update_inplace(|nums| {
nums.push(4);
nums.push(5);
nums.push(6);
});
println!("{:?}", r); // Reactive([1, 2, 3, 4, 5, 6])
println!("{:?}", d); // Reactive(21)
}
use reactivate::{Merge, Reactive};
fn main() {
let a = Reactive::new(String::from("hazash"));
let b = Reactive::new(0);
let d = (&a, &b)
.merge()
.derive(|(a_val, b_val)| a_val.len() + b_val);
println!("{:?}", a); // Reactive("hazash")
println!("{:?}", b); // Reactive(0)
println!("{:?}", d); // Reactive(6)
b.update(|_| 5);
println!("{:?}", a); // Reactive("hazash")
println!("{:?}", b); // Reactive(5)
println!("{:?}", d); // Reactive(11)
a.update(|_| String::from("mouse"));
println!("{:?}", a); // Reactive("mouse")
println!("{:?}", b); // Reactive(5)
println!("{:?}", d); // Reactive(10)
}
use reactivate::Reactive;
use std::sync::{Arc, Mutex};
fn main() {
let r: Reactive<String> = Reactive::default();
// Arc<Mutex<T>> is used to make the vector thread safe
// because Reactive as a whole must be thread safe
let changes: Arc<Mutex<Vec<String>>> = Default::default();
r.add_observer({
let changes = changes.clone();
move |val| changes.lock().unwrap().push(val.clone())
});
r.update(|_| String::from("a"));
r.update_inplace(|s| {
s.push('b');
});
println!("{:?}", r); // Reactive("ab")
println!("{:?}", changes.lock().unwrap().clone()); // ["a", "ab"]
}
use reactivate::Reactive;
use std::{thread, time::Duration};
fn main() {
let r: Reactive<String> = Reactive::default();
let d = r.derive(|s| s.len());
let handle = thread::spawn({
let r = r.clone();
move || {
for _ in 0..10 {
r.update_inplace(|s| s.push('a'));
thread::sleep(Duration::from_millis(1));
}
}
});
for _ in 0..10 {
r.update_inplace(|s| s.push('b'));
thread::sleep(Duration::from_millis(1));
}
handle.join().unwrap();
println!("{:?}", r); // Reactive("babababababababababa")
println!("{:?}", d); // Reactive(20)
}
M. Zahash โ zahash.z@gmail.com
Distributed under the MIT license. See LICENSE
for more information.
git checkout -b feature/fooBar
)git commit -am 'Add some fooBar'
)git push origin feature/fooBar
)If you find Reactivate helpful and enjoy using it, consider giving it a โญ on GitHub! Your star is a gesture of appreciation and encouragement for the continuous improvement of Reactivate.