cel_cxx/values/impls/
map.rs1use super::*;
2use crate::{types::*, values::*};
3
4use std::collections::{BTreeMap, HashMap, LinkedList, VecDeque};
5
6impl_typed!(
7 Map: Value {
8 @[K: TypedMapKey, V: TypedValue]
9 HashMap<K, V> => MapType::new(K::mapkey_type(), V::value_type()),
10
11 @[K: TypedMapKey, V: TypedValue]
12 BTreeMap<K, V> => MapType::new(K::mapkey_type(), V::value_type()),
13
14 @[K: TypedMapKey, V: TypedValue]
15 [(K, V)] => MapType::new(K::mapkey_type(), V::value_type()),
16
17 @[K: TypedMapKey, V: TypedValue]
18 Vec<(K, V)> => MapType::new(K::mapkey_type(), V::value_type()),
19
20 @[K: TypedMapKey, V: TypedValue]
21 VecDeque<(K, V)> => MapType::new(K::mapkey_type(), V::value_type()),
22
23 @[K: TypedMapKey, V: TypedValue]
24 LinkedList<(K, V)> => MapType::new(K::mapkey_type(), V::value_type()),
25 }
26);
27
28impl_into!(
29 Map: Value {
30 @[K: IntoMapKey, V: IntoValue]
31 HashMap<K, V> => |self|
32 self.into_iter()
33 .map(|(k, v)| (k.into_mapkey(), v.into_value()))
34 .collect(),
35
36 @[K: IntoMapKey, V: IntoValue]
37 BTreeMap<K, V> => |self|
38 self.into_iter()
39 .map(|(k, v)| (k.into_mapkey(), v.into_value()))
40 .collect(),
41
42 @[K: IntoMapKey + Clone, V: IntoValue + Clone]
43 &[(K, V)] => |self|
44 self.iter()
45 .map(|(k, v)| (k.into_mapkey(), v.into_value()))
46 .collect(),
47
48 @[K: IntoMapKey, V: IntoValue]
49 Vec<(K, V)> => |self|
50 self.into_iter()
51 .map(|(k, v)| (k.into_mapkey(), v.into_value()))
52 .collect(),
53
54 @[K: IntoMapKey, V: IntoValue]
55 VecDeque<(K, V)> => |self|
56 self.into_iter()
57 .map(|(k, v)| (k.into_mapkey(), v.into_value()))
58 .collect(),
59
60 @[K: IntoMapKey, V: IntoValue]
61 LinkedList<(K, V)> => |self|
62 self.into_iter()
63 .map(|(k, v)| (k.into_mapkey(), v.into_value()))
64 .collect(),
65 }
66);
67
68type VecMap<K, V> = Vec<(K, V)>;
69type VecDequeMap<K, V> = VecDeque<(K, V)>;
70type LinkedListMap<K, V> = LinkedList<(K, V)>;
71
72#[rustfmt::skip]
73impl_from_map!(
74 HashMap,
75
76 BTreeMap,
77
78 VecMap,
79
80 VecDequeMap,
81
82 LinkedListMap,
83);