From 4755578c086a128bf32c55a56702b268886da2bf Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Mon, 6 Oct 2014 21:02:58 -0700 Subject: [PATCH] re-cleaning up --- serde2/src/bin.rs | 71 +++++++++++-------------------------------- serde2/src/de2.rs | 76 ++++++++++++++--------------------------------- 2 files changed, 40 insertions(+), 107 deletions(-) diff --git a/serde2/src/bin.rs b/serde2/src/bin.rs index 7b46a179..14cc565d 100644 --- a/serde2/src/bin.rs +++ b/serde2/src/bin.rs @@ -73,15 +73,9 @@ impl> Deserializer for MyDeserializer { visitor.visit_string(self, v) } Some(Option(is_some)) => { - /* visitor.visit_option(self, MyOptionVisitor { is_some: is_some, - finished: false, }) - */ - //fail!() - let value = try!(self.visit_option()); - visitor.visit_option(self, value) } Some(SeqStart(len)) => { visitor.visit_seq(self, MySeqVisitor { len: len }) @@ -101,47 +95,28 @@ impl> Deserializer for MyDeserializer { } fn visit_option< - R: Deserialize, Error>, - //V: de2::Visitor, R, Error>, - //>(&mut self, visitor: &mut V) -> Result { - >(&mut self) -> Result, Error> { - match self.next() { - Some(Option(true)) => { - let v = try!(Deserialize::deserialize(self)); - Ok(Some(v)) - } - Some(Option(false)) => { - Ok(None) - } - Some(_) => { - Err(self.syntax_error()) - } - None => { - Err(self.end_of_stream_error()) - } - } - - /* + R, + V: de2::Visitor, R, Error>, + >(&mut self, visitor: &mut V) -> Result { match self.peek() { Some(&Null) => { self.next(); - Ok(None) + visitor.visit_option(self, MyOptionVisitor { + is_some: false, + }) } - Some(&Option(true)) => { + Some(&Option(is_some)) => { self.next(); - let v = try!(Deserialize::deserialize(self)); - Ok(Some(v)) - } - Some(&Option(false)) => { - self.next(); - Ok(None) + visitor.visit_option(self, MyOptionVisitor { + is_some: is_some, + }) } _ => { - let v = try!(Deserialize::deserialize(self)); - Ok(Some(v)) + visitor.visit_option(self, MyOptionVisitor { + is_some: true, + }) } } - */ } fn syntax_error(&mut self) -> Error { @@ -153,10 +128,8 @@ impl> Deserializer for MyDeserializer { } } -/* struct MyOptionVisitor { is_some: bool, - finished: bool, } impl< @@ -165,21 +138,15 @@ impl< fn visit< T: Deserialize, Error>, >(&mut self, d: &mut MyDeserializer) -> Result, Error> { - if self.finished { - Err(d.syntax_error()) + if self.is_some { + self.is_some = false; + let value = try!(Deserialize::deserialize(d)); + Ok(Some(value)) } else { - self.finished = true; - - if self.is_some { - let v = try!(Deserialize::deserialize(d)); - Ok(Some(v)) - } else { - Ok(None) - } + Ok(None) } } } -*/ struct MySeqVisitor { len: uint, @@ -290,7 +257,6 @@ mod json { } */ - /* fn visit_option< Visitor: de2::OptionVisitor, >(&mut self, d: &mut D, mut visitor: Visitor) -> Result { @@ -299,7 +265,6 @@ mod json { None => Ok(Null), } } - */ fn visit_seq< Visitor: de2::SeqVisitor, diff --git a/serde2/src/de2.rs b/serde2/src/de2.rs index 201c14d6..90505a6a 100644 --- a/serde2/src/de2.rs +++ b/serde2/src/de2.rs @@ -13,18 +13,12 @@ pub trait Deserializer { V: Visitor, >(&mut self, visitor: &mut V) -> Result; - /* fn visit_option< R, V: Visitor, >(&mut self, visitor: &mut V) -> Result { self.visit(visitor) } - */ - - fn visit_option< - R: Deserialize, - >(&mut self) -> Result, E>; fn syntax_error(&mut self) -> E; @@ -49,31 +43,10 @@ pub trait Visitor, R, E> { } fn visit_option< - T: Deserialize, - >(&mut self, d: &mut D, _v: Option) -> Result { - Err(d.syntax_error()) - } - - /* - fn visit_option_some< - T: Deserialize, - >(&mut self, d: &mut D, _v: T) -> Result { - Err(d.syntax_error()) - } - - fn visit_option_none(&mut self, d: &mut D) -> Result { - Err(d.syntax_error()) - } - */ - - /* - fn visit_option< - T: Deserialize, - V: OptionVisitor, + V: OptionVisitor, >(&mut self, d: &mut D, _visitor: V) -> Result { Err(d.syntax_error()) } - */ fn visit_seq< V: SeqVisitor @@ -82,10 +55,10 @@ pub trait Visitor, R, E> { } } -pub trait OptionVisitor, D, R, E> { - fn visit_some(&mut self, d: &mut D, _v: T) -> Result; - - fn visit_none(&mut self, d: &mut D) -> Result; +pub trait OptionVisitor { + fn visit< + T: Deserialize, + >(&mut self, d: &mut D) -> Result, E>; } pub trait SeqVisitor { @@ -166,7 +139,6 @@ impl< E, > Deserialize for Option { fn deserialize(d: &mut D) -> Result, E> { - /* struct Visitor; impl< @@ -174,15 +146,14 @@ impl< D: Deserializer, E, > self::Visitor, E> for Visitor { - fn visit_option(&mut self, _d: &mut D, v: Option) -> Result, E> { - Ok(v) + fn visit_option< + V: OptionVisitor, + >(&mut self, d: &mut D, mut visitor: V) -> Result, E> { + visitor.visit(d) } } d.visit_option(&mut Visitor) - */ - - d.visit_option() } } @@ -296,7 +267,7 @@ trait Deserialize { /////////////////////////////////////////////////////////////////////////////// trait Deserializer { - fn visit(&mut self, state: &mut S) -> Result; + fn visit(&mut self, state: &mut S) -> Result<(), E>; fn syntax_error(&mut self) -> E; } @@ -314,7 +285,7 @@ trait DeserializerState { } trait Visitor { - fn visit(&mut self, state: &mut S) -> Result; + fn visit(&mut self, state: &mut S) -> Result<(), E>; fn size_hint(&self) -> (uint, Option); } @@ -335,43 +306,43 @@ trait VisitorState< } /* - fn visit_i8(&mut self, d: &mut D, v: i8) -> Result { + fn visit_i8(&mut self, d: &mut D, v: i8) -> Result<(), E> { self.visit_i64(d, v as i64) } - fn visit_i16(&mut self, d: &mut D, v: i16) -> Result { + fn visit_i16(&mut self, d: &mut D, v: i16) -> Result<(), E> { self.visit_i64(d, v as i64) } - fn visit_i32(&mut self, d: &mut D, v: i32) -> Result { + fn visit_i32(&mut self, d: &mut D, v: i32) -> Result<(), E> { self.visit_i64(d, v as i64) } - fn visit_i64(&mut self, d: &mut D, v: i64) -> Result { + fn visit_i64(&mut self, d: &mut D, v: i64) -> Result<(), E> { Err(d.syntax_error()) } - fn visit_uint(&mut self, d: &mut D, v: int) -> Result { + fn visit_uint(&mut self, d: &mut D, v: int) -> Result<(), E> { self.visit_u64(d, v as u64) } - fn visit_u8(&mut self, d: &mut D, v: u8) -> Result { + fn visit_u8(&mut self, d: &mut D, v: u8) -> Result<(), E> { self.visit_u64(d, v as u64) } - fn visit_u16(&mut self, d: &mut D, v: u16) -> Result { + fn visit_u16(&mut self, d: &mut D, v: u16) -> Result<(), E> { self.visit_u64(d, v as u64) } - fn visit_u32(&mut self, d: &mut D, v: u32) -> Result { + fn visit_u32(&mut self, d: &mut D, v: u32) -> Result<(), E> { self.visit_u64(d, v as u64) } - fn visit_u64(&mut self, d: &mut D, _v: u64) -> Result { + fn visit_u64(&mut self, d: &mut D, _v: u64) -> Result<(), E> { Err(d.syntax_error()) } - fn visit_string(&mut self, d: &mut D, _v: String) -> Result { + fn visit_string(&mut self, d: &mut D, _v: String) -> Result<(), E> { Err(d.syntax_error()) } */ @@ -379,7 +350,7 @@ trait VisitorState< fn visit_seq< R, V: SeqVisitor, - >(&mut self, d: &mut D, _visitor: V) -> Result { + >(&mut self, d: &mut D, _visitor: V) -> Result<(), E> { Err(d.syntax_error()) } @@ -746,6 +717,3 @@ impl< */ */ - -/////////////////////////////////////////////////////////////////////////////// -