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