cbsk_mut_data is a ref mut tool
you can use cbsk_mut_data for static data modification, etc
the idea for this cargo crate comes
from dark-std(github)
this cargo crate may be unsafe, if you want safe data, you can
use dark-std(github)
data type
- MutDataObj
- MutDataVec
- MutDataHashMap
more type welcome to submit issue
Simple Example
Cargo.toml file :
cbsk_mut_data = "2.0.2"
main.rs file :
use cbsk_mut_data::mut_data_obj::MutDataObj;
fn main() {
let b = MutDataObj::new(true);
println!("b is {b}"); b.set(false);
println!("b is {b}"); b.trigger();
println!("b is {b}");}
main.rs file (use struct) :
use cbsk_mut_data::mut_data_obj::MutDataObj;
#[derive(Default, Debug)]
struct A {
data: MutDataObj<i32>,
}
fn main() {
let a = A::default();
println!("a is {a:?}"); a.data.set(10);
println!("a is {a:?}");}
main.rs file (in struct)
use cbsk_mut_data::mut_data_obj::MutDataObj;
#[derive(Default, Debug)]
struct A {
b: MutDataObj<B>,
}
#[derive(Default, Debug)]
struct B {
data: i32,
}
fn main() {
let a = A::default();
println!("a is {a:?}"); a.b.as_mut().data = 10;
println!("a is {a:?}");}
OnceCell Example
Cargo.toml file :
once_cell = "1.19.0"
cbsk_mut_data = "2.0.2"
main.rs file :
use cbsk_mut_data::mut_data_obj::MutDataObj;
use once_cell::sync::Lazy;
pub static B: Lazy<MutDataObj<bool>> = Lazy::new(MutDataObj::default);
fn main() {
println!("b is {}", B.as_ref()); B.set(true);
println!("b is {}", B.as_ref()); B.trigger();
println!("b is {}", B.as_ref());}
Unsafe Example
Cargo.toml file :
cbsk_mut_data = "2.0.2"
main.rs file :
use std::sync::Arc;
use cbsk_mut_data::mut_data_obj::MutDataObj;
use cbsk_mut_data::mut_data_ref::MutDataRef;
fn main() {
let mut a = MutDataRef::new(&mut 0);
println!("a is {a:?}"); let b = a.clone();
*a = 10;
println!("b is {b:?}");
let c = Arc::new(MutDataObj::new(0));
println!("c is {c:?}"); let d = c.clone();
c.set(10);
println!("d is {d:?}");}
Thanks