Rename the json::Value deserializer

This commit is contained in:
Erick Tryzelaar
2014-11-14 19:26:52 -08:00
parent db17fe4f3c
commit 2b121b0db8
2 changed files with 33 additions and 32 deletions
+3 -2
View File
@@ -1863,7 +1863,8 @@ mod tests {
Object, Object,
}; };
use super::{Parser, ParserError, from_str}; use super::{Parser, ParserError, from_str};
use super::value::{JsonDeserializer, ToJson, from_json}; use super::value;
use super::value::{ToJson, from_json};
use super::{ use super::{
EOFWhileParsingList, EOFWhileParsingList,
EOFWhileParsingObject, EOFWhileParsingObject,
@@ -2333,7 +2334,7 @@ mod tests {
} }
fn test_json_deserialize_ok< fn test_json_deserialize_ok<
T: PartialEq + Show + ToJson + de::Deserialize<JsonDeserializer, ParserError> T: PartialEq + Show + ToJson + de::Deserialize<value::Deserializer, ParserError>
>(errors: &[T]) { >(errors: &[T]) {
for value in errors.iter() { for value in errors.iter() {
let v: T = from_json(value.to_json()).unwrap(); let v: T = from_json(value.to_json()).unwrap();
+30 -30
View File
@@ -309,32 +309,32 @@ impl<D: de::Deserializer<E>, E> de::Deserialize<D, E> for Value {
} }
} }
enum JsonDeserializerState { enum DeserializerState {
JsonDeserializerValueState(Value), DeserializerValueState(Value),
JsonDeserializerListState(vec::MoveItems<Value>), DeserializerListState(vec::MoveItems<Value>),
JsonDeserializerObjectState(tree_map::MoveEntries<string::String, Value>), DeserializerObjectState(tree_map::MoveEntries<string::String, Value>),
JsonDeserializerEndState, DeserializerEndState,
} }
pub struct JsonDeserializer { pub struct Deserializer {
stack: Vec<JsonDeserializerState>, stack: Vec<DeserializerState>,
} }
impl JsonDeserializer { impl Deserializer {
/// Creates a new deserializer instance for deserializing the specified JSON value. /// Creates a new deserializer instance for deserializing the specified JSON value.
pub fn new(json: Value) -> JsonDeserializer { pub fn new(json: Value) -> Deserializer {
JsonDeserializer { Deserializer {
stack: vec!(JsonDeserializerValueState(json)), stack: vec!(DeserializerValueState(json)),
} }
} }
} }
impl Iterator<Result<de::Token, ParserError>> for JsonDeserializer { impl Iterator<Result<de::Token, ParserError>> for Deserializer {
#[inline] #[inline]
fn next(&mut self) -> Option<Result<de::Token, ParserError>> { fn next(&mut self) -> Option<Result<de::Token, ParserError>> {
loop { loop {
match self.stack.pop() { match self.stack.pop() {
Some(JsonDeserializerValueState(value)) => { Some(DeserializerValueState(value)) => {
let token = match value { let token = match value {
Null => de::Null, Null => de::Null,
Boolean(x) => de::Bool(x), Boolean(x) => de::Bool(x),
@@ -343,23 +343,23 @@ impl Iterator<Result<de::Token, ParserError>> for JsonDeserializer {
String(x) => de::String(x), String(x) => de::String(x),
List(x) => { List(x) => {
let len = x.len(); let len = x.len();
self.stack.push(JsonDeserializerListState(x.into_iter())); self.stack.push(DeserializerListState(x.into_iter()));
de::SeqStart(len) de::SeqStart(len)
} }
Object(x) => { Object(x) => {
let len = x.len(); let len = x.len();
self.stack.push(JsonDeserializerObjectState(x.into_iter())); self.stack.push(DeserializerObjectState(x.into_iter()));
de::MapStart(len) de::MapStart(len)
} }
}; };
return Some(Ok(token)); return Some(Ok(token));
} }
Some(JsonDeserializerListState(mut iter)) => { Some(DeserializerListState(mut iter)) => {
match iter.next() { match iter.next() {
Some(value) => { Some(value) => {
self.stack.push(JsonDeserializerListState(iter)); self.stack.push(DeserializerListState(iter));
self.stack.push(JsonDeserializerValueState(value)); self.stack.push(DeserializerValueState(value));
// loop around. // loop around.
} }
None => { None => {
@@ -367,11 +367,11 @@ impl Iterator<Result<de::Token, ParserError>> for JsonDeserializer {
} }
} }
} }
Some(JsonDeserializerObjectState(mut iter)) => { Some(DeserializerObjectState(mut iter)) => {
match iter.next() { match iter.next() {
Some((key, value)) => { Some((key, value)) => {
self.stack.push(JsonDeserializerObjectState(iter)); self.stack.push(DeserializerObjectState(iter));
self.stack.push(JsonDeserializerValueState(value)); self.stack.push(DeserializerValueState(value));
return Some(Ok(de::String(key))); return Some(Ok(de::String(key)));
} }
None => { None => {
@@ -379,7 +379,7 @@ impl Iterator<Result<de::Token, ParserError>> for JsonDeserializer {
} }
} }
} }
Some(JsonDeserializerEndState) => { Some(DeserializerEndState) => {
return Some(Ok(de::End)); return Some(Ok(de::End));
} }
None => { return None; } None => { return None; }
@@ -388,7 +388,7 @@ impl Iterator<Result<de::Token, ParserError>> for JsonDeserializer {
} }
} }
impl de::Deserializer<ParserError> for JsonDeserializer { impl de::Deserializer<ParserError> for Deserializer {
fn end_of_stream_error(&mut self) -> ParserError { fn end_of_stream_error(&mut self) -> ParserError {
SyntaxError(EOFWhileParsingValue, 0, 0) SyntaxError(EOFWhileParsingValue, 0, 0)
} }
@@ -407,7 +407,7 @@ impl de::Deserializer<ParserError> for JsonDeserializer {
#[inline] #[inline]
fn missing_field< fn missing_field<
T: de::Deserialize<JsonDeserializer, ParserError> T: de::Deserialize<Deserializer, ParserError>
>(&mut self, _field: &'static str) -> Result<T, ParserError> { >(&mut self, _field: &'static str) -> Result<T, ParserError> {
// JSON can represent `null` values as a missing value, so this isn't // JSON can represent `null` values as a missing value, so this isn't
// necessarily an error. // necessarily an error.
@@ -417,7 +417,7 @@ impl de::Deserializer<ParserError> for JsonDeserializer {
// Special case treating options as a nullable value. // Special case treating options as a nullable value.
#[inline] #[inline]
fn expect_option< fn expect_option<
U: de::Deserialize<JsonDeserializer, ParserError> U: de::Deserialize<Deserializer, ParserError>
>(&mut self, token: de::Token) -> Result<Option<U>, ParserError> { >(&mut self, token: de::Token) -> Result<Option<U>, ParserError> {
match token { match token {
de::Null => Ok(None), de::Null => Ok(None),
@@ -442,7 +442,7 @@ impl de::Deserializer<ParserError> for JsonDeserializer {
}; };
let mut iter = match state { let mut iter = match state {
JsonDeserializerObjectState(iter) => iter, DeserializerObjectState(iter) => iter,
_ => { panic!("state machine error, expected an object"); } _ => { panic!("state machine error, expected an object"); }
}; };
@@ -462,10 +462,10 @@ impl de::Deserializer<ParserError> for JsonDeserializer {
None => { } None => { }
} }
self.stack.push(JsonDeserializerEndState); self.stack.push(DeserializerEndState);
for field in fields.into_iter().rev() { for field in fields.into_iter().rev() {
self.stack.push(JsonDeserializerValueState(field)); self.stack.push(DeserializerValueState(field));
} }
variant variant
@@ -493,9 +493,9 @@ impl de::Deserializer<ParserError> for JsonDeserializer {
/// Decodes a json value from a `Value`. /// Decodes a json value from a `Value`.
pub fn from_json< pub fn from_json<
T: de::Deserialize<JsonDeserializer, ParserError> T: de::Deserialize<Deserializer, ParserError>
>(json: Value) -> Result<T, ParserError> { >(json: Value) -> Result<T, ParserError> {
let mut d = JsonDeserializer::new(json); let mut d = Deserializer::new(json);
de::Deserialize::deserialize(&mut d) de::Deserialize::deserialize(&mut d)
} }