-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrefs_muts.rs
38 lines (34 loc) · 929 Bytes
/
refs_muts.rs
1
2
3
4
5
6
7
8
9
10
11
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
use ready_paint::gfx::Gfx;
use ready_paint::scene::HashTypeId2Data;
use std::any::TypeId;
use ready_paint::{
multi::{refs_muts, Mut, Ref},
scene::Ready,
};
#[derive(Debug)]
struct Data1 {
val: i32,
}
#[derive(Debug)]
struct Data2 {
val: i32,
}
impl Ready for Data1 {
fn ready(&mut self, _: &mut HashTypeId2Data, _: &Gfx) {}
}
impl Ready for Data2 {
fn ready(&mut self, _: &mut HashTypeId2Data, _: &Gfx) {}
}
fn main() {
use std::any::Any;
use std::collections::HashMap;
let mut data: HashMap<TypeId, Box<dyn Any>> = HashMap::new();
data.insert(TypeId::of::<Data1>(), Box::new(Data1 { val: 42 }));
data.insert(TypeId::of::<Data2>(), Box::new(Data2 { val: 3 }));
let (r1, r2) = refs_muts::<(Ref<Data1>, Mut<Data2>)>(&mut data);
r2.val = 5;
assert_eq!(r1.val, 42);
assert_eq!(r2.val, 5);
println!("r1.val is {:}", r1.val);
println!("r2.val is {:}", r2.val);
}