mirror of
https://github.com/serde-rs/serde.git
synced 2025-10-02 15:25:38 +00:00
Replace StructField with Str/String. 2322ns vs 2982ns
This commit is contained in:
parent
4b8c62828e
commit
8587bb3a4c
@ -272,7 +272,7 @@ mod deserializer {
|
|||||||
use collections::HashMap;
|
use collections::HashMap;
|
||||||
use super::{Outer, Inner, Error, EndOfStream, SyntaxError};
|
use super::{Outer, Inner, Error, EndOfStream, SyntaxError};
|
||||||
use de::Deserializer;
|
use de::Deserializer;
|
||||||
use de::{Token, Uint, Char, String, Null, TupleStart, StructStart, StructField, SeqStart, MapStart, End, Option};
|
use de::{Token, Uint, Char, String, Null, TupleStart, StructStart, Str, SeqStart, MapStart, End, Option};
|
||||||
|
|
||||||
enum State {
|
enum State {
|
||||||
OuterState(Outer),
|
OuterState(Outer),
|
||||||
@ -325,7 +325,7 @@ mod deserializer {
|
|||||||
self.stack.push(FieldState("a"));
|
self.stack.push(FieldState("a"));
|
||||||
Some(Ok(StructStart("Inner")))
|
Some(Ok(StructStart("Inner")))
|
||||||
}
|
}
|
||||||
Some(FieldState(name)) => Some(Ok(StructField(name))),
|
Some(FieldState(name)) => Some(Ok(Str(name))),
|
||||||
Some(VecState(value)) => {
|
Some(VecState(value)) => {
|
||||||
self.stack.push(EndState);
|
self.stack.push(EndState);
|
||||||
let len = value.len();
|
let len = value.len();
|
||||||
|
30
de.rs
30
de.rs
@ -28,7 +28,6 @@ pub enum Token {
|
|||||||
TupleStart(uint),
|
TupleStart(uint),
|
||||||
|
|
||||||
StructStart(&'static str),
|
StructStart(&'static str),
|
||||||
StructField(&'static str),
|
|
||||||
|
|
||||||
EnumStart(&'static str, &'static str),
|
EnumStart(&'static str, &'static str),
|
||||||
|
|
||||||
@ -192,15 +191,20 @@ pub trait Deserializer<E>: Iterator<Result<Token, E>> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
match token {
|
match token {
|
||||||
StructField(n) => {
|
Str(n) => {
|
||||||
if name == n {
|
if name != n {
|
||||||
Deserializable::deserialize(self)
|
return Err(self.syntax_error());
|
||||||
} else {
|
|
||||||
Err(self.syntax_error())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => Err(self.syntax_error()),
|
String(n) => {
|
||||||
|
if name != n.as_slice() {
|
||||||
|
return Err(self.syntax_error());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => { return Err(self.syntax_error()); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Deserializable::deserialize(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
@ -492,7 +496,7 @@ mod tests {
|
|||||||
use serialize::Decoder;
|
use serialize::Decoder;
|
||||||
|
|
||||||
use super::{Token, Null, Int, Uint, Str, String, Char, Option};
|
use super::{Token, Null, Int, Uint, Str, String, Char, Option};
|
||||||
use super::{TupleStart, StructStart, StructField, EnumStart};
|
use super::{TupleStart, StructStart, EnumStart};
|
||||||
use super::{SeqStart, MapStart, End};
|
use super::{SeqStart, MapStart, End};
|
||||||
use super::{Deserializer, Deserializable};
|
use super::{Deserializer, Deserializable};
|
||||||
|
|
||||||
@ -737,7 +741,7 @@ mod tests {
|
|||||||
fn test_tokens_struct_empty() {
|
fn test_tokens_struct_empty() {
|
||||||
let tokens = vec!(
|
let tokens = vec!(
|
||||||
StructStart("Outer"),
|
StructStart("Outer"),
|
||||||
StructField("inner"),
|
Str("inner"),
|
||||||
SeqStart(0),
|
SeqStart(0),
|
||||||
End,
|
End,
|
||||||
End,
|
End,
|
||||||
@ -753,16 +757,16 @@ mod tests {
|
|||||||
fn test_tokens_struct() {
|
fn test_tokens_struct() {
|
||||||
let tokens = vec!(
|
let tokens = vec!(
|
||||||
StructStart("Outer"),
|
StructStart("Outer"),
|
||||||
StructField("inner"),
|
Str("inner"),
|
||||||
SeqStart(1),
|
SeqStart(1),
|
||||||
StructStart("Inner"),
|
StructStart("Inner"),
|
||||||
StructField("a"),
|
Str("a"),
|
||||||
Null,
|
Null,
|
||||||
|
|
||||||
StructField("b"),
|
Str("b"),
|
||||||
Uint(5),
|
Uint(5),
|
||||||
|
|
||||||
StructField("c"),
|
Str("c"),
|
||||||
MapStart(1),
|
MapStart(1),
|
||||||
TupleStart(2),
|
TupleStart(2),
|
||||||
String("abc".to_strbuf()),
|
String("abc".to_strbuf()),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user