aldrin_core/adapters/
vec.rs

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