cel_cxx/values/impls/
map.rs

1use 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);