mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-06-13 04:21:04 +00:00
checkpoint
This commit is contained in:
+3
-3
@@ -6,9 +6,9 @@ authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>"]
|
|||||||
[lib]
|
[lib]
|
||||||
name = "serde2"
|
name = "serde2"
|
||||||
|
|
||||||
[[bin]]
|
#[[bin]]
|
||||||
name = "serde2"
|
#name = "serde2"
|
||||||
path = "src/bin.rs"
|
#path = "src/bin.rs"
|
||||||
|
|
||||||
[dependencies.serde2_macros]
|
[dependencies.serde2_macros]
|
||||||
path = "serde2_macros/"
|
path = "serde2_macros/"
|
||||||
|
|||||||
+4
-5
@@ -1,11 +1,12 @@
|
|||||||
pub trait Deserialize<D, E> {
|
pub trait Deserialize<S, E> {
|
||||||
fn deserialize(state: &mut D) -> Result<Self, E>;
|
fn deserialize(state: &mut S) -> Result<Self, E>;
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
pub trait Deserializer<D, R> {
|
pub trait Deserializer<D, R> {
|
||||||
fn deserialize<T: Deserialize<D, R>>(&mut self) -> R;
|
fn deserialize<T: Deserialize<D, R>>(&mut self) -> R;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
@@ -24,11 +25,9 @@ pub trait SeqVisitor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub trait VisitorState<E> {
|
pub trait VisitorState<E> {
|
||||||
fn syntax_error
|
fn syntax_error(&mut self) -> E;
|
||||||
|
|
||||||
|
|
||||||
fn visit_int(&mut self) -> Result<int, E> {
|
fn visit_int(&mut self) -> Result<int, E> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_seq<Iter: FromIterator>(&mut self, ) -> Iter
|
fn visit_seq<Iter: FromIterator>(&mut self, ) -> Iter
|
||||||
|
|||||||
+75
-58
@@ -3,18 +3,21 @@ use std::hash::Hash;
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
trait Deserialize<D, E> {
|
trait Deserialize<S, E> {
|
||||||
fn deserialize(d: &mut D) -> Result<Self, E>;
|
fn deserialize(state: &mut S) -> Result<Self, E>;
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
trait Deserializer<D, E> {
|
trait Deserializer<R, E> {
|
||||||
fn deserialize<T: Deserialize<D, E>>(&mut self) -> Result<T, E>;
|
fn visit<S>(&mut self, state: &mut S) -> Result<R, E>;
|
||||||
|
|
||||||
|
fn syntax_error(&mut self) -> E;
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
/*
|
||||||
trait DeserializerState<E> {
|
trait DeserializerState<E> {
|
||||||
fn syntax_error(&mut self) -> E;
|
fn syntax_error(&mut self) -> E;
|
||||||
|
|
||||||
@@ -23,48 +26,70 @@ trait DeserializerState<E> {
|
|||||||
T: Deserialize<Self, E>,
|
T: Deserialize<Self, E>,
|
||||||
>(&mut self, visitor: &mut V) -> Result<T, E>;
|
>(&mut self, visitor: &mut V) -> Result<T, E>;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
trait Visitor<R> {
|
||||||
|
fn visit<S>(&mut self, state: &mut S) -> R;
|
||||||
|
}
|
||||||
|
|
||||||
trait VisitorState<
|
trait VisitorState<
|
||||||
T,
|
D: Deserializer<R, E>,
|
||||||
D: DeserializerState<E>,
|
R,
|
||||||
E,
|
E,
|
||||||
> {
|
> {
|
||||||
fn visit_null(&mut self, d: &mut D) -> Result<T, E> {
|
/*
|
||||||
Err(d.syntax_error())
|
fn visit_null(&mut self) -> R;
|
||||||
}
|
*/
|
||||||
|
|
||||||
fn visit_int(&mut self, d: &mut D, _v: int) -> Result<T, E> {
|
fn visit_int(&mut self, d: &mut D, _v: int) -> Result<R, E>;
|
||||||
Err(d.syntax_error())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_string(&mut self, d: &mut D, _v: String) -> Result<T, E> {
|
/*
|
||||||
Err(d.syntax_error())
|
fn visit_string(&mut self, _v: String) -> R;
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_seq<
|
fn visit_seq<
|
||||||
V: SeqVisitor<D, E>,
|
V: Visitor<R>,
|
||||||
>(&mut self, d: &mut D, _visitor: V) -> Result<T, E> {
|
>(&mut self, _visitor: V) -> R;
|
||||||
Err(d.syntax_error())
|
|
||||||
}
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
#[inline]
|
||||||
|
fn visit_named_seq<
|
||||||
|
Elt: Deserialize<D, E>,
|
||||||
|
V: SeqVisitor<D, Result<Elt, E>>,
|
||||||
|
>(&mut self, d: &mut D, _name: &str, visitor: V) -> Result<T, E> {
|
||||||
|
self.visit_seq(d, visitor)
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
fn visit_seq_elt<
|
||||||
|
T: Deserialize<Self, R>,
|
||||||
|
>(&mut self, first: bool, value: T) -> R;
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
#[inline]
|
||||||
fn visit_map<
|
fn visit_map<
|
||||||
V: MapVisitor<D, E>,
|
K: Deserialize<D, E>,
|
||||||
|
V: Deserialize<D, E>,
|
||||||
|
V: Visitor<D, Result<T, E>>,
|
||||||
>(&mut self, d: &mut D, _visitor: V) -> Result<T, E> {
|
>(&mut self, d: &mut D, _visitor: V) -> Result<T, E> {
|
||||||
Err(d.syntax_error())
|
Err(d.syntax_error())
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
trait SeqVisitor<D, E> {
|
|
||||||
fn next<
|
|
||||||
T: Deserialize<D, E>,
|
|
||||||
>(&mut self, d: &mut D) -> Option<Result<T, E>>;
|
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn size_hint(&self) -> (uint, Option<uint>) {
|
fn visit_named_map<
|
||||||
(0, None)
|
V: Visitor<D, E>,
|
||||||
|
>(&mut self, d: &mut D, _name: &str, visitor: V) -> Result<T, E> {
|
||||||
|
self.visit_map(d, visitor)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn visit_map_elt<
|
||||||
|
K: Deserialize<D, E>,
|
||||||
|
V: Deserialize<D, E>,
|
||||||
|
>(&mut self, first: bool, value: T) -> Result<(K, V), E>;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
trait MapVisitor<D, E> {
|
trait MapVisitor<D, E> {
|
||||||
fn next<
|
fn next<
|
||||||
K: Deserialize<D, E>,
|
K: Deserialize<D, E>,
|
||||||
@@ -76,29 +101,32 @@ trait MapVisitor<D, E> {
|
|||||||
(0, None)
|
(0, None)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
impl<
|
impl<
|
||||||
D: DeserializerState<E>,
|
S: Deserializer<int, E>,
|
||||||
E,
|
E,
|
||||||
> Deserialize<D, E> for int {
|
> Deserialize<S, E> for int {
|
||||||
fn deserialize(d: &mut D) -> Result<int, E> {
|
fn deserialize(state: &mut S) -> Result<int, E> {
|
||||||
struct Visitor;
|
struct Visitor;
|
||||||
|
|
||||||
impl<
|
impl<
|
||||||
D: DeserializerState<E>,
|
D: Deserializer<int, E>,
|
||||||
E,
|
E,
|
||||||
> ::VisitorState<int, D, E> for Visitor {
|
> VisitorState<S, int, E> for Visitor {
|
||||||
fn visit_int(&mut self, _d: &mut D, v: int) -> Result<int, E> {
|
fn visit_int(&mut self, d: &mut D, v: int) -> Result<int, E> {
|
||||||
Ok(v)
|
Ok(v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
d.visit(&mut Visitor)
|
state.visit(&mut Visitor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
impl<
|
impl<
|
||||||
D: DeserializerState<E>,
|
D: DeserializerState<E>,
|
||||||
E,
|
E,
|
||||||
@@ -135,7 +163,7 @@ impl<
|
|||||||
E,
|
E,
|
||||||
> ::VisitorState<Vec<T>, D, E> for Visitor {
|
> ::VisitorState<Vec<T>, D, E> for Visitor {
|
||||||
fn visit_seq<
|
fn visit_seq<
|
||||||
Visitor: ::SeqVisitor<D, E>,
|
Visitor: ::Visitor<D, E>,
|
||||||
>(&mut self, d: &mut D, mut visitor: Visitor) -> Result<Vec<T>, E> {
|
>(&mut self, d: &mut D, mut visitor: Visitor) -> Result<Vec<T>, E> {
|
||||||
let (len, _) = visitor.size_hint();
|
let (len, _) = visitor.size_hint();
|
||||||
let mut values = Vec::with_capacity(len);
|
let mut values = Vec::with_capacity(len);
|
||||||
@@ -162,6 +190,7 @@ impl<
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
impl<
|
impl<
|
||||||
@@ -516,10 +545,8 @@ struct MySeqVisitor {
|
|||||||
|
|
||||||
impl<
|
impl<
|
||||||
Iter: Iterator<Token>,
|
Iter: Iterator<Token>,
|
||||||
> SeqVisitor<MyDeserializer<Iter>, ()> for MySeqVisitor {
|
> Visitor<MyDeserializer<Iter>, ()> for MySeqVisitor {
|
||||||
fn next<
|
fn next(&mut self, d: &mut MyDeserializer<Iter>) -> Option<Result<T, ()>> {
|
||||||
T: Deserialize<MyDeserializer<Iter>, ()>,
|
|
||||||
>(&mut self, d: &mut MyDeserializer<Iter>) -> Option<Result<T, ()>> {
|
|
||||||
match d.peek() {
|
match d.peek() {
|
||||||
Some(&End) => {
|
Some(&End) => {
|
||||||
d.next();
|
d.next();
|
||||||
@@ -527,7 +554,7 @@ impl<
|
|||||||
}
|
}
|
||||||
Some(_) => {
|
Some(_) => {
|
||||||
self.len -= 1;
|
self.len -= 1;
|
||||||
Some(Deserialize::deserialize(d))
|
Some(d.visit_seq_elt())
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
Some(Err(d.syntax_error()))
|
Some(Err(d.syntax_error()))
|
||||||
@@ -546,11 +573,8 @@ struct MyMapVisitor {
|
|||||||
|
|
||||||
impl<
|
impl<
|
||||||
Iter: Iterator<Token>,
|
Iter: Iterator<Token>,
|
||||||
> MapVisitor<MyDeserializer<Iter>, ()> for MyMapVisitor {
|
> Visitor<MyDeserializer<Iter>, ()> for MyMapVisitor {
|
||||||
fn next<
|
fn next(&mut self, d: &mut MyDeserializer<Iter>) -> Option<Result<(K, V), ()>> {
|
||||||
K: Deserialize<MyDeserializer<Iter>, ()>,
|
|
||||||
V: Deserialize<MyDeserializer<Iter>, ()>,
|
|
||||||
>(&mut self, d: &mut MyDeserializer<Iter>) -> Option<Result<(K, V), ()>> {
|
|
||||||
match d.peek() {
|
match d.peek() {
|
||||||
Some(&End) => {
|
Some(&End) => {
|
||||||
d.next();
|
d.next();
|
||||||
@@ -558,18 +582,7 @@ impl<
|
|||||||
}
|
}
|
||||||
Some(_) => {
|
Some(_) => {
|
||||||
self.len -= 1;
|
self.len -= 1;
|
||||||
|
Some(d.visit_map_elt())
|
||||||
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)))
|
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
Some(Err(d.syntax_error()))
|
Some(Err(d.syntax_error()))
|
||||||
@@ -652,3 +665,7 @@ fn main() {
|
|||||||
let v: Result<json::Value, ()> = Deserialize::deserialize(&mut state);
|
let v: Result<json::Value, ()> = Deserialize::deserialize(&mut state);
|
||||||
println!("{}", v);
|
println!("{}", v);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
*/
|
||||||
|
|
||||||
|
fn main() {}
|
||||||
|
|||||||
+6
-4
@@ -1,8 +1,10 @@
|
|||||||
#![feature(macro_rules)]
|
#![feature(macro_rules)]
|
||||||
|
|
||||||
pub use ser::{Serialize, Serializer};
|
//pub use ser::{Serialize, Serializer};
|
||||||
pub use ser::{Visitor, VisitorState};
|
//pub use ser::{Visitor, VisitorState};
|
||||||
pub use ser::GatherTokens;
|
//pub use ser::GatherTokens;
|
||||||
|
|
||||||
pub mod ser;
|
pub mod ser;
|
||||||
pub mod json;
|
//pub mod de;
|
||||||
|
pub mod de2;
|
||||||
|
//pub mod json;
|
||||||
|
|||||||
@@ -124,6 +124,25 @@ pub trait VisitorState<R> {
|
|||||||
>(&mut self, first: bool, key: K, value: V) -> R;
|
>(&mut self, first: bool, key: K, value: V) -> R;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub trait SeqVisitor<S, R> {
|
||||||
|
fn visit(&mut self, state: &mut S) -> Option<R>;
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn size_hint(&self) -> (uint, Option<uint>) {
|
||||||
|
(0, None)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait MapVisitor<S, R> {
|
||||||
|
fn visit(&mut self, state: &mut S) -> Option<R>;
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn size_hint(&self) -> (uint, Option<uint>) {
|
||||||
|
(0, None)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
macro_rules! impl_serialize {
|
macro_rules! impl_serialize {
|
||||||
@@ -339,6 +358,7 @@ impl<
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#[deriving(Show)]
|
#[deriving(Show)]
|
||||||
@@ -471,3 +491,4 @@ impl<'a> VisitorState<()> for GatherTokens<'a> {
|
|||||||
value.serialize(self)
|
value.serialize(self)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user