From 71cc95248c4b5aa902be3e8e71b6b087d18e559a Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Thu, 30 Jul 2015 07:57:46 -0700 Subject: [PATCH] Allow Option to be used directly as a ser::SeqVisitor --- serde/src/ser/impls.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) 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 {