diff --git a/serde/src/ser/impls.rs b/serde/src/ser/impls.rs index 311e77f9..559f67a0 100644 --- a/serde/src/ser/impls.rs +++ b/serde/src/ser/impls.rs @@ -97,6 +97,26 @@ impl Serialize for Option where T: Serialize { } } +impl SeqVisitor for Option where T: Serialize { + #[inline] + fn visit(&mut self, serializer: &mut S) -> Result, S::Error> + where S: Serializer, + { + match self.take() { + Some(value) => { + try!(serializer.visit_seq_elt(value)); + Ok(Some(())) + } + None => Ok(None), + } + } + + #[inline] + fn len(&self) -> Option { + Some(if self.is_some() { 1 } else { 0 }) + } +} + /////////////////////////////////////////////////////////////////////////////// pub struct SeqIteratorVisitor {