speed up serde2's json serialization to 180MB/s

This commit is contained in:
Erick Tryzelaar 2014-09-06 21:11:29 -07:00
parent e2e395e8d0
commit 205f8aaa51

View File

@ -110,7 +110,7 @@ impl<W: Writer> ser::VisitorState<io::IoResult<()>> for Serializer<W> {
fn visit_seq< fn visit_seq<
V: ser::Visitor<Serializer<W>, io::IoResult<()>> V: ser::Visitor<Serializer<W>, io::IoResult<()>>
>(&mut self, mut visitor: V) -> io::IoResult<()> { >(&mut self, mut visitor: V) -> io::IoResult<()> {
try!(write!(self.writer, "[")); try!(self.writer.write_str("["));
loop { loop {
match visitor.visit(self) { match visitor.visit(self) {
@ -120,7 +120,7 @@ impl<W: Writer> ser::VisitorState<io::IoResult<()>> for Serializer<W> {
} }
} }
write!(self.writer, "]") self.writer.write_str("]")
} }
#[inline] #[inline]
@ -128,7 +128,7 @@ impl<W: Writer> ser::VisitorState<io::IoResult<()>> for Serializer<W> {
T: ser::Serialize<Serializer<W>, io::IoResult<()>> T: ser::Serialize<Serializer<W>, io::IoResult<()>>
>(&mut self, first: bool, value: T) -> io::IoResult<()> { >(&mut self, first: bool, value: T) -> io::IoResult<()> {
if !first { if !first {
try!(write!(self.writer, ",")); try!(self.writer.write_str(","));
} }
value.serialize(self) value.serialize(self)
@ -138,7 +138,7 @@ impl<W: Writer> ser::VisitorState<io::IoResult<()>> for Serializer<W> {
fn visit_map< fn visit_map<
V: ser::Visitor<Serializer<W>, io::IoResult<()>> V: ser::Visitor<Serializer<W>, io::IoResult<()>>
>(&mut self, mut visitor: V) -> io::IoResult<()> { >(&mut self, mut visitor: V) -> io::IoResult<()> {
try!(write!(self.writer, "{{")); try!(self.writer.write_str("{{"));
loop { loop {
match visitor.visit(self) { match visitor.visit(self) {
@ -147,7 +147,8 @@ impl<W: Writer> ser::VisitorState<io::IoResult<()>> for Serializer<W> {
None => { break; } None => { break; }
} }
} }
write!(self.writer, "}}")
self.writer.write_str("}}")
} }
#[inline] #[inline]
@ -156,11 +157,11 @@ impl<W: Writer> ser::VisitorState<io::IoResult<()>> for Serializer<W> {
V: ser::Serialize<Serializer<W>, io::IoResult<()>> V: ser::Serialize<Serializer<W>, io::IoResult<()>>
>(&mut self, first: bool, key: K, value: V) -> io::IoResult<()> { >(&mut self, first: bool, key: K, value: V) -> io::IoResult<()> {
if !first { if !first {
try!(write!(self.writer, ",")); try!(self.writer.write_str(","));
} }
try!(key.serialize(self)); try!(key.serialize(self));
try!(write!(self.writer, ":")); try!(self.writer.write_str(":"));
value.serialize(self) value.serialize(self)
} }
} }