diff --git a/serde2/Cargo.toml b/serde2/Cargo.toml index 9001c6bd..73aa2281 100644 --- a/serde2/Cargo.toml +++ b/serde2/Cargo.toml @@ -6,9 +6,9 @@ authors = ["Erick Tryzelaar "] [lib] name = "serde2" -[[bin]] -name = "serde2" -path = "src/bin.rs" +#[[bin]] +#name = "serde2" +#path = "src/bin.rs" [dependencies.serde2_macros] path = "serde2_macros/" diff --git a/serde2/src/de.rs b/serde2/src/de.rs index 0753fc33..3b2f4672 100644 --- a/serde2/src/de.rs +++ b/serde2/src/de.rs @@ -1,11 +1,12 @@ -pub trait Deserialize { - fn deserialize(state: &mut D) -> Result; +pub trait Deserialize { + fn deserialize(state: &mut S) -> Result; } /////////////////////////////////////////////////////////////////////////////// pub trait Deserializer { fn deserialize>(&mut self) -> R; + } /////////////////////////////////////////////////////////////////////////////// @@ -24,11 +25,9 @@ pub trait SeqVisitor { } pub trait VisitorState { - fn syntax_error - + fn syntax_error(&mut self) -> E; fn visit_int(&mut self) -> Result { - } fn visit_seq(&mut self, ) -> Iter diff --git a/serde2/src/de2.rs b/serde2/src/de2.rs index 77607897..867cf85c 100644 --- a/serde2/src/de2.rs +++ b/serde2/src/de2.rs @@ -3,18 +3,21 @@ use std::hash::Hash; /////////////////////////////////////////////////////////////////////////////// -trait Deserialize { - fn deserialize(d: &mut D) -> Result; +trait Deserialize { + fn deserialize(state: &mut S) -> Result; } /////////////////////////////////////////////////////////////////////////////// -trait Deserializer { - fn deserialize>(&mut self) -> Result; +trait Deserializer { + fn visit(&mut self, state: &mut S) -> Result; + + fn syntax_error(&mut self) -> E; } /////////////////////////////////////////////////////////////////////////////// +/* trait DeserializerState { fn syntax_error(&mut self) -> E; @@ -23,48 +26,70 @@ trait DeserializerState { T: Deserialize, >(&mut self, visitor: &mut V) -> Result; } +*/ + +trait Visitor { + fn visit(&mut self, state: &mut S) -> R; +} trait VisitorState< - T, - D: DeserializerState, + D: Deserializer, + R, E, > { - fn visit_null(&mut self, d: &mut D) -> Result { - Err(d.syntax_error()) - } + /* + fn visit_null(&mut self) -> R; + */ - fn visit_int(&mut self, d: &mut D, _v: int) -> Result { - Err(d.syntax_error()) - } + fn visit_int(&mut self, d: &mut D, _v: int) -> Result; - fn visit_string(&mut self, d: &mut D, _v: String) -> Result { - Err(d.syntax_error()) - } + /* + fn visit_string(&mut self, _v: String) -> R; fn visit_seq< - V: SeqVisitor, - >(&mut self, d: &mut D, _visitor: V) -> Result { - Err(d.syntax_error()) - } + V: Visitor, + >(&mut self, _visitor: V) -> R; + /* + #[inline] + fn visit_named_seq< + Elt: Deserialize, + V: SeqVisitor>, + >(&mut self, d: &mut D, _name: &str, visitor: V) -> Result { + self.visit_seq(d, visitor) + } + */ + + fn visit_seq_elt< + T: Deserialize, + >(&mut self, first: bool, value: T) -> R; + */ + + /* + #[inline] fn visit_map< - V: MapVisitor, + K: Deserialize, + V: Deserialize, + V: Visitor>, >(&mut self, d: &mut D, _visitor: V) -> Result { Err(d.syntax_error()) } -} - -trait SeqVisitor { - fn next< - T: Deserialize, - >(&mut self, d: &mut D) -> Option>; #[inline] - fn size_hint(&self) -> (uint, Option) { - (0, None) + fn visit_named_map< + V: Visitor, + >(&mut self, d: &mut D, _name: &str, visitor: V) -> Result { + self.visit_map(d, visitor) } + + fn visit_map_elt< + K: Deserialize, + V: Deserialize, + >(&mut self, first: bool, value: T) -> Result<(K, V), E>; + */ } +/* trait MapVisitor { fn next< K: Deserialize, @@ -76,29 +101,32 @@ trait MapVisitor { (0, None) } } +*/ /////////////////////////////////////////////////////////////////////////////// impl< - D: DeserializerState, + S: Deserializer, E, -> Deserialize for int { - fn deserialize(d: &mut D) -> Result { +> Deserialize for int { + fn deserialize(state: &mut S) -> Result { struct Visitor; impl< - D: DeserializerState, + D: Deserializer, E, - > ::VisitorState for Visitor { - fn visit_int(&mut self, _d: &mut D, v: int) -> Result { + > VisitorState for Visitor { + fn visit_int(&mut self, d: &mut D, v: int) -> Result { Ok(v) } } - d.visit(&mut Visitor) + state.visit(&mut Visitor) } } + +/* impl< D: DeserializerState, E, @@ -135,7 +163,7 @@ impl< E, > ::VisitorState, D, E> for Visitor { fn visit_seq< - Visitor: ::SeqVisitor, + Visitor: ::Visitor, >(&mut self, d: &mut D, mut visitor: Visitor) -> Result, E> { let (len, _) = visitor.size_hint(); let mut values = Vec::with_capacity(len); @@ -162,6 +190,7 @@ impl< } } +/* /////////////////////////////////////////////////////////////////////////////// impl< @@ -516,10 +545,8 @@ struct MySeqVisitor { impl< Iter: Iterator, -> SeqVisitor, ()> for MySeqVisitor { - fn next< - T: Deserialize, ()>, - >(&mut self, d: &mut MyDeserializer) -> Option> { +> Visitor, ()> for MySeqVisitor { + fn next(&mut self, d: &mut MyDeserializer) -> Option> { match d.peek() { Some(&End) => { d.next(); @@ -527,7 +554,7 @@ impl< } Some(_) => { self.len -= 1; - Some(Deserialize::deserialize(d)) + Some(d.visit_seq_elt()) } None => { Some(Err(d.syntax_error())) @@ -546,11 +573,8 @@ struct MyMapVisitor { impl< Iter: Iterator, -> MapVisitor, ()> for MyMapVisitor { - fn next< - K: Deserialize, ()>, - V: Deserialize, ()>, - >(&mut self, d: &mut MyDeserializer) -> Option> { +> Visitor, ()> for MyMapVisitor { + fn next(&mut self, d: &mut MyDeserializer) -> Option> { match d.peek() { Some(&End) => { d.next(); @@ -558,18 +582,7 @@ impl< } Some(_) => { self.len -= 1; - - let key = match Deserialize::deserialize(d) { - Ok(key) => key, - Err(err) => { return Some(Err(err)); } - }; - - let value = match Deserialize::deserialize(d) { - Ok(value) => value, - Err(err) => { return Some(Err(err)); } - }; - - Some(Ok((key, value))) + Some(d.visit_map_elt()) } None => { Some(Err(d.syntax_error())) @@ -652,3 +665,7 @@ fn main() { let v: Result = Deserialize::deserialize(&mut state); println!("{}", v); } +*/ +*/ + +fn main() {} diff --git a/serde2/src/lib.rs b/serde2/src/lib.rs index 5d2e81f7..a5a0bbd5 100644 --- a/serde2/src/lib.rs +++ b/serde2/src/lib.rs @@ -1,8 +1,10 @@ #![feature(macro_rules)] -pub use ser::{Serialize, Serializer}; -pub use ser::{Visitor, VisitorState}; -pub use ser::GatherTokens; +//pub use ser::{Serialize, Serializer}; +//pub use ser::{Visitor, VisitorState}; +//pub use ser::GatherTokens; pub mod ser; -pub mod json; +//pub mod de; +pub mod de2; +//pub mod json; diff --git a/serde2/src/ser.rs b/serde2/src/ser.rs index bee99e44..bc4f59b8 100644 --- a/serde2/src/ser.rs +++ b/serde2/src/ser.rs @@ -124,6 +124,25 @@ pub trait VisitorState { >(&mut self, first: bool, key: K, value: V) -> R; } +pub trait SeqVisitor { + fn visit(&mut self, state: &mut S) -> Option; + + #[inline] + fn size_hint(&self) -> (uint, Option) { + (0, None) + } +} + +pub trait MapVisitor { + fn visit(&mut self, state: &mut S) -> Option; + + #[inline] + fn size_hint(&self) -> (uint, Option) { + (0, None) + } +} + + /////////////////////////////////////////////////////////////////////////////// macro_rules! impl_serialize { @@ -339,6 +358,7 @@ impl< } } +/* /////////////////////////////////////////////////////////////////////////////// #[deriving(Show)] @@ -471,3 +491,4 @@ impl<'a> VisitorState<()> for GatherTokens<'a> { value.serialize(self) } } +*/