diff --git a/serde/src/ser/mod.rs b/serde/src/ser/mod.rs index 32239e2f..12e294f5 100644 --- a/serde/src/ser/mod.rs +++ b/serde/src/ser/mod.rs @@ -979,12 +979,33 @@ pub trait SerializeSeq { /// Returned from `Serializer::serialize_tuple`. /// -/// ```rust,ignore -/// let mut tup = serializer.serialize_tuple(3)?; -/// tup.serialize_element(&self.0)?; -/// tup.serialize_element(&self.1)?; -/// tup.serialize_element(&self.2)?; -/// tup.end() +/// ```rust +/// use serde::{Serialize, Serializer}; +/// use serde::ser::SerializeTuple; +/// +/// # mod fool { +/// # trait Serialize {} +/// impl Serialize for (A, B, C) +/// # {} +/// # } +/// # +/// # struct Tuple3(A, B, C); +/// # +/// # impl Serialize for Tuple3 +/// where A: Serialize, +/// B: Serialize, +/// C: Serialize +/// { +/// fn serialize(&self, serializer: S) -> Result +/// where S: Serializer +/// { +/// let mut tup = serializer.serialize_tuple(3)?; +/// tup.serialize_element(&self.0)?; +/// tup.serialize_element(&self.1)?; +/// tup.serialize_element(&self.2)?; +/// tup.end() +/// } +/// } /// ``` pub trait SerializeTuple { /// Must match the `Ok` type of our `Serializer`. @@ -1002,12 +1023,23 @@ pub trait SerializeTuple { /// Returned from `Serializer::serialize_tuple_struct`. /// -/// ```rust,ignore -/// let mut ts = serializer.serialize_tuple_struct("Rgb", 3)?; -/// ts.serialize_field(&self.0)?; -/// ts.serialize_field(&self.1)?; -/// ts.serialize_field(&self.2)?; -/// ts.end() +/// ```rust +/// use serde::{Serialize, Serializer}; +/// use serde::ser::SerializeTupleStruct; +/// +/// struct Rgb(u8, u8, u8); +/// +/// impl Serialize for Rgb { +/// fn serialize(&self, serializer: S) -> Result +/// where S: Serializer +/// { +/// let mut ts = serializer.serialize_tuple_struct("Rgb", 3)?; +/// ts.serialize_field(&self.0)?; +/// ts.serialize_field(&self.1)?; +/// ts.serialize_field(&self.2)?; +/// ts.end() +/// } +/// } /// ``` pub trait SerializeTupleStruct { /// Must match the `Ok` type of our `Serializer`. @@ -1025,13 +1057,34 @@ pub trait SerializeTupleStruct { /// Returned from `Serializer::serialize_tuple_variant`. /// -/// ```rust,ignore -/// match *self { -/// E::T(ref a, ref b) => { -/// let mut tv = serializer.serialize_tuple_variant("E", 0, "T", 2)?; -/// tv.serialize_field(a)?; -/// tv.serialize_field(b)?; -/// tv.end() +/// ```rust +/// use serde::{Serialize, Serializer}; +/// use serde::ser::SerializeTupleVariant; +/// +/// enum E { +/// T(u8, u8), +/// U(String, u32, u32), +/// } +/// +/// impl Serialize for E { +/// fn serialize(&self, serializer: S) -> Result +/// where S: Serializer +/// { +/// match *self { +/// E::T(ref a, ref b) => { +/// let mut tv = serializer.serialize_tuple_variant("E", 0, "T", 2)?; +/// tv.serialize_field(a)?; +/// tv.serialize_field(b)?; +/// tv.end() +/// } +/// E::U(ref a, ref b, ref c) => { +/// let mut tv = serializer.serialize_tuple_variant("E", 1, "U", 3)?; +/// tv.serialize_field(a)?; +/// tv.serialize_field(b)?; +/// tv.serialize_field(c)?; +/// tv.end() +/// } +/// } /// } /// } /// ``` @@ -1051,12 +1104,42 @@ pub trait SerializeTupleVariant { /// Returned from `Serializer::serialize_map`. /// -/// ```rust,ignore -/// let mut map = serializer.serialize_map(Some(self.len()))?; -/// for (k, v) in self { -/// map.serialize_entry(k, v)?; +/// ```rust +/// # use std::marker::PhantomData; +/// # +/// # struct HashMap(PhantomData, PhantomData); +/// # +/// # impl HashMap { +/// # fn len(&self) -> usize { +/// # unimplemented!() +/// # } +/// # } +/// # +/// # impl<'a, K, V> IntoIterator for &'a HashMap { +/// # type Item = (&'a K, &'a V); +/// # type IntoIter = Box>; +/// # fn into_iter(self) -> Self::IntoIter { +/// # unimplemented!() +/// # } +/// # } +/// # +/// use serde::{Serialize, Serializer}; +/// use serde::ser::SerializeMap; +/// +/// impl Serialize for HashMap +/// where K: Serialize, +/// V: Serialize +/// { +/// fn serialize(&self, serializer: S) -> Result +/// where S: Serializer +/// { +/// let mut map = serializer.serialize_map(Some(self.len()))?; +/// for (k, v) in self { +/// map.serialize_entry(k, v)?; +/// } +/// map.end() +/// } /// } -/// map.end() /// ``` pub trait SerializeMap { /// Must match the `Ok` type of our `Serializer`. @@ -1098,12 +1181,27 @@ pub trait SerializeMap { /// Returned from `Serializer::serialize_struct`. /// -/// ```rust,ignore -/// let mut struc = serializer.serialize_struct("Rgb", 3)?; -/// struc.serialize_field("r", &self.r)?; -/// struc.serialize_field("g", &self.g)?; -/// struc.serialize_field("b", &self.b)?; -/// struc.end() +/// ```rust +/// use serde::{Serialize, Serializer}; +/// use serde::ser::SerializeStruct; +/// +/// struct Rgb { +/// r: u8, +/// g: u8, +/// b: u8, +/// } +/// +/// impl Serialize for Rgb { +/// fn serialize(&self, serializer: S) -> Result +/// where S: Serializer +/// { +/// let mut rgb = serializer.serialize_struct("Rgb", 3)?; +/// rgb.serialize_field("r", &self.r)?; +/// rgb.serialize_field("g", &self.g)?; +/// rgb.serialize_field("b", &self.b)?; +/// rgb.end() +/// } +/// } /// ``` pub trait SerializeStruct { /// Must match the `Ok` type of our `Serializer`. @@ -1124,14 +1222,27 @@ pub trait SerializeStruct { /// Returned from `Serializer::serialize_struct_variant`. /// -/// ```rust,ignore -/// match *self { -/// E::S { ref r, ref g, ref b } => { -/// let mut sv = serializer.serialize_struct_variant("E", 0, "S", 3)?; -/// sv.serialize_field("r", r)?; -/// sv.serialize_field("g", g)?; -/// sv.serialize_field("b", b)?; -/// sv.end() +/// ```rust +/// use serde::{Serialize, Serializer}; +/// use serde::ser::SerializeStructVariant; +/// +/// enum E { +/// S { r: u8, g: u8, b: u8 } +/// } +/// +/// impl Serialize for E { +/// fn serialize(&self, serializer: S) -> Result +/// where S: Serializer +/// { +/// match *self { +/// E::S { ref r, ref g, ref b } => { +/// let mut sv = serializer.serialize_struct_variant("E", 0, "S", 3)?; +/// sv.serialize_field("r", r)?; +/// sv.serialize_field("g", g)?; +/// sv.serialize_field("b", b)?; +/// sv.end() +/// } +/// } /// } /// } /// ```