-
Notifications
You must be signed in to change notification settings - Fork 348
/
index_list.rs
76 lines (68 loc) · 2.07 KB
/
index_list.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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#[cfg(all(test, feature = "iterator", feature = "macro"))]
mod test {
use cosmwasm_std::{testing::MockStorage, Addr};
use cw_storage_macro::index_list;
use cw_storage_plus::{IndexedMap, MultiIndex, UniqueIndex};
use serde::{Deserialize, Serialize};
#[test]
fn index_list_compiles() {
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
struct TestStruct {
id: u64,
id2: u32,
addr: Addr,
}
#[index_list(TestStruct)]
struct TestIndexes<'a> {
id: MultiIndex<'a, u32, TestStruct, u64>,
addr: UniqueIndex<'a, Addr, TestStruct>,
}
let _: IndexedMap<u64, TestStruct, TestIndexes> = IndexedMap::new(
"t",
TestIndexes {
id: MultiIndex::new(|_pk, t| t.id2, "t", "t_id2"),
addr: UniqueIndex::new(|t| t.addr.clone(), "t_addr"),
},
);
}
#[test]
fn index_list_works() {
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
struct TestStruct {
id: u64,
id2: u32,
addr: Addr,
}
#[index_list(TestStruct)]
struct TestIndexes<'a> {
id: MultiIndex<'a, u32, TestStruct, u64>,
addr: UniqueIndex<'a, Addr, TestStruct>,
}
let mut storage = MockStorage::new();
let idm: IndexedMap<u64, TestStruct, TestIndexes> = IndexedMap::new(
"t",
TestIndexes {
id: MultiIndex::new(|_pk, t| t.id2, "t", "t_2"),
addr: UniqueIndex::new(|t| t.addr.clone(), "t_addr"),
},
);
idm.save(
&mut storage,
0,
&TestStruct {
id: 0,
id2: 100,
addr: Addr::unchecked("1"),
},
)
.unwrap();
assert_eq!(
idm.load(&storage, 0).unwrap(),
TestStruct {
id: 0,
id2: 100,
addr: Addr::unchecked("1"),
}
);
}
}