aldrin_core/adapters/
map.rs1use 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}