aldrin_core/adapters/
map.rs

1use crate::tags::{KeyTag, Map, PrimaryKeyTag, PrimaryTag, Tag};
2use crate::{Serialize, SerializeError, SerializeKey, Serializer};
3
4#[derive(Debug)]
5pub struct IterAsMap<T>(pub T);
6
7impl<K, T, I> PrimaryTag for IterAsMap<I>
8where
9    K: PrimaryKeyTag,
10    T: PrimaryTag,
11    I: IntoIterator<Item = (K, T)>,
12{
13    type Tag = Map<K::KeyTag, T::Tag>;
14}
15
16impl<K, L, T, U, I> Serialize<Map<K, T>> for IterAsMap<I>
17where
18    K: KeyTag,
19    L: SerializeKey<K>,
20    T: Tag,
21    U: Serialize<T>,
22    I: IntoIterator<Item = (L, U)>,
23{
24    fn serialize(self, serializer: Serializer) -> Result<(), SerializeError> {
25        serializer.serialize_map2_iter(self.0)
26    }
27}
28
29impl<'a, K, L, T, U, I> Serialize<Map<K, T>> for &'a IterAsMap<I>
30where
31    K: KeyTag,
32    L: SerializeKey<K>,
33    T: Tag,
34    U: Serialize<T>,
35    &'a I: IntoIterator<Item = (L, U)>,
36{
37    fn serialize(self, serializer: Serializer) -> Result<(), SerializeError> {
38        serializer.serialize_map2_iter(&self.0)
39    }
40}