Skip to main content

cgp_serde/providers/
iterator.rs

1use cgp::prelude::*;
2use serde::ser::SerializeSeq;
3
4use crate::components::{CanSerializeValue, ValueSerializer, ValueSerializerComponent};
5use crate::types::SerializeWithContext;
6
7#[cgp_impl(new SerializeIterator)]
8impl<Value> ValueSerializer<Value>
9where
10    for<'a> &'a Value: IntoIterator,
11    Self: for<'a> CanSerializeValue<<&'a Value as IntoIterator>::Item>,
12{
13    fn serialize<S>(&self, value: &Value, serializer: S) -> Result<S::Ok, S::Error>
14    where
15        S: serde::Serializer,
16    {
17        let items = value.into_iter();
18        let mut serializer = serializer.serialize_seq(None)?;
19        for item in items {
20            serializer.serialize_element(&SerializeWithContext {
21                context: self,
22                value: &item,
23            })?
24        }
25
26        serializer.end()
27    }
28}