aldrin_core/adapters/
set.rs1use crate::tags::{KeyTag, PrimaryKeyTag, PrimaryTag, Set};
2use crate::{Serialize, SerializeError, SerializeKey, Serializer};
3
4#[derive(Debug)]
5pub struct IterAsSet<T>(pub T);
6
7impl<T> PrimaryTag for IterAsSet<T>
8where
9 T: IntoIterator,
10 T::Item: PrimaryKeyTag,
11{
12 type Tag = Set<<T::Item as PrimaryKeyTag>::KeyTag>;
13}
14
15impl<T, U> Serialize<Set<T>> for IterAsSet<U>
16where
17 T: KeyTag,
18 U: IntoIterator,
19 U::Item: SerializeKey<T>,
20{
21 fn serialize(self, serializer: Serializer) -> Result<(), SerializeError> {
22 serializer.serialize_set2_iter(self.0)
23 }
24}
25
26impl<'a, T, U> Serialize<Set<T>> for &'a IterAsSet<U>
27where
28 T: KeyTag,
29 &'a U: IntoIterator,
30 <&'a U as IntoIterator>::Item: SerializeKey<T>,
31{
32 fn serialize(self, serializer: Serializer) -> Result<(), SerializeError> {
33 serializer.serialize_set2_iter(&self.0)
34 }
35}