diff --git a/serde/src/ser/mod.rs b/serde/src/ser/mod.rs index 41052c6d..32239e2f 100644 --- a/serde/src/ser/mod.rs +++ b/serde/src/ser/mod.rs @@ -900,12 +900,68 @@ pub trait Serializer: Sized { /// Returned from `Serializer::serialize_seq` and /// `Serializer::serialize_seq_fixed_size`. /// -/// ```rust,ignore -/// let mut seq = serializer.serialize_seq(Some(self.len()))?; -/// for element in self { -/// seq.serialize_element(element)?; +/// ```rust +/// # use std::marker::PhantomData; +/// # +/// # macro_rules! unimplemented_vec { +/// # ($name:ident) => { +/// # struct $name(PhantomData); +/// # +/// # impl $name { +/// # fn len(&self) -> usize { +/// # unimplemented!() +/// # } +/// # } +/// # +/// # impl<'a, T> IntoIterator for &'a $name { +/// # type Item = &'a T; +/// # type IntoIter = Box>; +/// # fn into_iter(self) -> Self::IntoIter { +/// # unimplemented!() +/// # } +/// # } +/// # } +/// # } +/// # +/// # unimplemented_vec!(Vec); +/// # unimplemented_vec!(Array); +/// # +/// use serde::{Serialize, Serializer}; +/// use serde::ser::SerializeSeq; +/// +/// impl Serialize for Vec +/// where T: Serialize +/// { +/// fn serialize(&self, serializer: S) -> Result +/// where S: Serializer +/// { +/// let mut seq = serializer.serialize_seq(Some(self.len()))?; +/// for element in self { +/// seq.serialize_element(element)?; +/// } +/// seq.end() +/// } +/// } +/// +/// # mod fool { +/// # trait Serialize {} +/// impl Serialize for [T; 16] +/// # {} +/// # } +/// # +/// # impl Serialize for Array +/// where T: Serialize +/// { +/// fn serialize(&self, serializer: S) -> Result +/// where S: Serializer +/// { +/// let mut seq = serializer.serialize_seq_fixed_size(16)?; +/// for element in self { +/// seq.serialize_element(element)?; +/// } +/// seq.end() +/// } /// } -/// seq.end() /// ``` pub trait SerializeSeq { /// Must match the `Ok` type of our `Serializer`.