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
#[macro_export]
macro_rules! implement_serialization_for_maps {
($($t:ident),*) => {
$(
impl<K, V> RedisSerializationProtocol for $t<K, V>
where
K: RedisSerializationProtocol + Hash + Eq,
V: RedisSerializationProtocol,
{
fn serialization(&self) -> Vec<u8> {
unimplemented!()
}
}
)*
};
}
#[macro_export]
macro_rules! implement_deserialization_for_maps {
($($t:ident),*) => {
$(
impl<K, V> RedisDeserializationProtocol for $t::<K, V>
where
K: RedisDeserializationProtocol + Eq + Hash + Ord,
V: RedisDeserializationProtocol,
{
fn deserialization(reply: Reply) -> RedisResult<Self> {
// TODO: ugly code, refactor !!!
match reply {
Reply::Arrays(array) => {
let hash = array
.chunks(2)
.map(|chunk| {
let field = &chunk[0];
let value = &chunk[1];
(
<K>::deserialization(field.clone()).unwrap(),
<V>::deserialization(value.clone()).unwrap(), // TODO: remove clone and unwrap
)
})
.collect();
Ok(hash)
}
_ => Err(RedisError::custom(TypeError, "miss type")),
}
}
}
)*
};
}