mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-06-14 11:41:01 +00:00
Rename the json::Value deserializer
This commit is contained in:
+3
-2
@@ -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
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user