cl_aux/structures/
iter_wrapper.rs

1/// A wrapper around `I: Iterator` to workaround trait implementation conflicts
2#[derive(Debug)]
3pub struct IterWrapper<I>(
4  /// Iterator
5  pub I,
6)
7where
8  I: Iterator;
9
10#[cfg(feature = "serde")]
11mod serde {
12  use crate::IterWrapper;
13  use serde::{ser::SerializeSeq as _, Serialize, Serializer};
14
15  impl<I> Serialize for IterWrapper<I>
16  where
17    I: Clone + Iterator,
18    I::Item: Serialize,
19  {
20    #[inline]
21    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
22    where
23      S: Serializer,
24    {
25      let mut seq = serializer.serialize_seq(None)?;
26      for elem in self.0.clone() {
27        seq.serialize_element(&elem)?;
28      }
29      seq.end()
30    }
31  }
32}