cl-traits 7.0.0

Provides traits that describe collections
Documentation
/// A wrapper around `I: Iterator` to workaround trait implementation conflicts
#[derive(Debug)]
pub struct IterWrapper<I>(
  /// Iterator
  pub I,
)
where
  I: Iterator;

#[cfg(feature = "serde")]
mod serde {
  use crate::IterWrapper;
  use serde::{ser::SerializeSeq, Serialize, Serializer};

  impl<I> Serialize for IterWrapper<I>
  where
    I: Clone + Iterator,
    I::Item: Serialize,
  {
    #[inline]
    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
    where
      S: Serializer,
    {
      let mut seq = serializer.serialize_seq(None)?;
      for elem in self.0.clone() {
        seq.serialize_element(&elem)?;
      }
      seq.end()
    }
  }
}