aldrin_core/adapters/
set.rs

1use 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}