mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-06-14 15:11:02 +00:00
Convert json::ser to associated types
This commit is contained in:
@@ -525,6 +525,7 @@ pub fn from_str<
|
|||||||
from_iter(s.bytes())
|
from_iter(s.bytes())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use std::str;
|
use std::str;
|
||||||
@@ -738,3 +739,4 @@ mod tests {
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ impl fmt::Show for ErrorCode {
|
|||||||
#[derive(Clone, PartialEq, Show)]
|
#[derive(Clone, PartialEq, Show)]
|
||||||
pub enum Error {
|
pub enum Error {
|
||||||
/// msg, line, col
|
/// msg, line, col
|
||||||
SyntaxError(ErrorCode, uint, uint),
|
SyntaxError(ErrorCode, usize, usize),
|
||||||
IoError(io::IoError),
|
IoError(io::IoError),
|
||||||
/*
|
/*
|
||||||
ExpectedError(String, String),
|
ExpectedError(String, String),
|
||||||
|
|||||||
@@ -1,11 +1,15 @@
|
|||||||
|
/*
|
||||||
pub use self::ser::Writer;
|
pub use self::ser::Writer;
|
||||||
pub use self::ser::{to_vec, to_string};
|
pub use self::ser::{to_vec, to_string};
|
||||||
pub use self::ser::escape_str;
|
pub use self::ser::escape_str;
|
||||||
|
|
||||||
pub use self::de::from_str;
|
pub use self::de::from_str;
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
pub mod builder;
|
pub mod builder;
|
||||||
pub mod de;
|
pub mod de;
|
||||||
|
*/
|
||||||
pub mod error;
|
pub mod error;
|
||||||
pub mod ser;
|
pub mod ser;
|
||||||
pub mod value;
|
//pub mod value;
|
||||||
|
|||||||
+92
-82
@@ -28,152 +28,162 @@ impl<W: io::Writer> Writer<W> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<W: io::Writer> ser::Serializer<W, (), IoError> for Writer<W> {
|
impl<W: io::Writer> ser::Serializer for Writer<W> {
|
||||||
|
type Value = ();
|
||||||
|
type Error = IoError;
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn visit<
|
fn visit<
|
||||||
T: ser::Serialize,
|
T: ser::Serialize,
|
||||||
>(&mut self, value: &T) -> Result<(), IoError> {
|
>(&mut self, value: &T) -> Result<(), IoError> {
|
||||||
value.visit(&mut self.writer, Visitor)
|
value.visit(&mut Visitor { writer: &mut self.writer })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Visitor;
|
struct Visitor<'a, W: 'a> {
|
||||||
|
writer: &'a mut W,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, W: io::Writer> ser::Visitor for Visitor<'a, W> {
|
||||||
|
type Value = ();
|
||||||
|
type Error = IoError;
|
||||||
|
|
||||||
impl<W: io::Writer> ser::Visitor<W, (), IoError> for Visitor {
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn visit_null(&self, writer: &mut W) -> Result<(), IoError> {
|
fn visit_unit(&mut self) -> Result<(), IoError> {
|
||||||
writer.write_str("null")
|
self.writer.write_str("null")
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn visit_bool(&self, writer: &mut W, value: bool) -> Result<(), IoError> {
|
fn visit_bool(&mut self, value: bool) -> Result<(), IoError> {
|
||||||
if value {
|
if value {
|
||||||
writer.write_str("true")
|
self.writer.write_str("true")
|
||||||
} else {
|
} else {
|
||||||
writer.write_str("false")
|
self.writer.write_str("false")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn visit_int(&self, writer: &mut W, value: int) -> Result<(), IoError> {
|
fn visit_isize(&mut self, value: isize) -> Result<(), IoError> {
|
||||||
write!(writer, "{}", value)
|
write!(self.writer, "{}", value)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn visit_i8(&self, writer: &mut W, value: i8) -> Result<(), IoError> {
|
fn visit_i8(&mut self, value: i8) -> Result<(), IoError> {
|
||||||
write!(writer, "{}", value)
|
write!(self.writer, "{}", value)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn visit_i16(&self, writer: &mut W, value: i16) -> Result<(), IoError> {
|
fn visit_i16(&mut self, value: i16) -> Result<(), IoError> {
|
||||||
write!(writer, "{}", value)
|
write!(self.writer, "{}", value)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn visit_i32(&self, writer: &mut W, value: i32) -> Result<(), IoError> {
|
fn visit_i32(&mut self, value: i32) -> Result<(), IoError> {
|
||||||
write!(writer, "{}", value)
|
write!(self.writer, "{}", value)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn visit_i64(&self, writer: &mut W, value: i64) -> Result<(), IoError> {
|
fn visit_i64(&mut self, value: i64) -> Result<(), IoError> {
|
||||||
write!(writer, "{}", value)
|
write!(self.writer, "{}", value)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn visit_uint(&self, writer: &mut W, value: uint) -> Result<(), IoError> {
|
fn visit_usize(&mut self, value: usize) -> Result<(), IoError> {
|
||||||
write!(writer, "{}", value)
|
write!(self.writer, "{}", value)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn visit_u8(&self, writer: &mut W, value: u8) -> Result<(), IoError> {
|
fn visit_u8(&mut self, value: u8) -> Result<(), IoError> {
|
||||||
write!(writer, "{}", value)
|
write!(self.writer, "{}", value)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn visit_u16(&self, writer: &mut W, value: u16) -> Result<(), IoError> {
|
fn visit_u16(&mut self, value: u16) -> Result<(), IoError> {
|
||||||
write!(writer, "{}", value)
|
write!(self.writer, "{}", value)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn visit_u32(&self, writer: &mut W, value: u32) -> Result<(), IoError> {
|
fn visit_u32(&mut self, value: u32) -> Result<(), IoError> {
|
||||||
write!(writer, "{}", value)
|
write!(self.writer, "{}", value)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn visit_u64(&self, writer: &mut W, value: u64) -> Result<(), IoError> {
|
fn visit_u64(&mut self, value: u64) -> Result<(), IoError> {
|
||||||
write!(writer, "{}", value)
|
write!(self.writer, "{}", value)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn visit_f64(&self, writer: &mut W, value: f64) -> Result<(), IoError> {
|
fn visit_f64(&mut self, value: f64) -> Result<(), IoError> {
|
||||||
fmt_f64_or_null(writer, value)
|
fmt_f64_or_null(self.writer, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn visit_char(&self, writer: &mut W, v: char) -> Result<(), IoError> {
|
fn visit_char(&mut self, v: char) -> Result<(), IoError> {
|
||||||
escape_char(writer, v)
|
escape_char(self.writer, v)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn visit_str(&self, writer: &mut W, value: &str) -> Result<(), IoError> {
|
fn visit_str(&mut self, value: &str) -> Result<(), IoError> {
|
||||||
escape_str(writer, value)
|
escape_str(self.writer, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn visit_seq<
|
fn visit_none(&mut self) -> Result<(), IoError> {
|
||||||
V: ser::SeqVisitor<W, (), IoError>
|
self.visit_unit()
|
||||||
>(&self, writer: &mut W, mut visitor: V) -> Result<(), IoError> {
|
|
||||||
try!(writer.write_str("["));
|
|
||||||
|
|
||||||
loop {
|
|
||||||
match try!(visitor.visit(writer, Visitor)) {
|
|
||||||
Some(()) => { }
|
|
||||||
None => { break; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.write_str("]")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn visit_seq_elt<
|
fn visit_some<V>(&mut self, value: V) -> Result<(), IoError>
|
||||||
T: ser::Serialize,
|
where V: ser::Serialize
|
||||||
>(&self, writer: &mut W, first: bool, value: T) -> Result<(), IoError> {
|
{
|
||||||
|
value.visit(self)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn visit_seq<V>(&mut self, mut visitor: V) -> Result<(), IoError>
|
||||||
|
where V: ser::SeqVisitor,
|
||||||
|
{
|
||||||
|
try!(self.writer.write_str("["));
|
||||||
|
|
||||||
|
while let Some(()) = try!(visitor.visit(self)) { }
|
||||||
|
|
||||||
|
self.writer.write_str("]")
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn visit_seq_elt<T>(&mut self, first: bool, value: T) -> Result<(), IoError>
|
||||||
|
where T: ser::Serialize,
|
||||||
|
{
|
||||||
if !first {
|
if !first {
|
||||||
try!(writer.write_str(","));
|
try!(self.writer.write_str(","));
|
||||||
}
|
}
|
||||||
|
|
||||||
value.visit(writer, Visitor)
|
value.visit(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn visit_map<
|
fn visit_map<V>(&mut self, mut visitor: V) -> Result<(), IoError>
|
||||||
V: ser::MapVisitor<W, (), IoError>
|
where V: ser::MapVisitor,
|
||||||
>(&self, writer: &mut W, mut visitor: V) -> Result<(), IoError> {
|
{
|
||||||
try!(writer.write_str("{{"));
|
try!(self.writer.write_str("{{"));
|
||||||
|
|
||||||
loop {
|
while let Some(()) = try!(visitor.visit(self)) { }
|
||||||
match try!(visitor.visit(writer, Visitor)) {
|
|
||||||
Some(()) => { }
|
|
||||||
None => { break; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.write_str("}}")
|
self.writer.write_str("}}")
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn visit_map_elt<
|
fn visit_map_elt<K, V>(&mut self, first: bool, key: K, value: V) -> Result<(), IoError>
|
||||||
K: ser::Serialize,
|
where K: ser::Serialize,
|
||||||
V: ser::Serialize,
|
V: ser::Serialize,
|
||||||
>(&self, writer: &mut W, first: bool, key: K, value: V) -> Result<(), IoError> {
|
{
|
||||||
if !first {
|
if !first {
|
||||||
try!(writer.write_str(","));
|
try!(self.writer.write_str(","));
|
||||||
}
|
}
|
||||||
|
|
||||||
try!(key.visit(writer, Visitor));
|
try!(key.visit(self));
|
||||||
try!(writer.write_str(":"));
|
try!(self.writer.write_str(":"));
|
||||||
value.visit(writer, Visitor)
|
value.visit(self)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -231,28 +241,28 @@ fn fmt_f64_or_null<W: io::Writer>(wr: &mut W, value: f64) -> Result<(), IoError>
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn to_writer<
|
pub fn to_writer<W, T>(wr: &mut W, value: &T) -> Result<(), IoError>
|
||||||
W: io::Writer,
|
where W: io::Writer,
|
||||||
T: ser::Serialize,
|
T: ser::Serialize,
|
||||||
>(wr: &mut W, value: &T) -> Result<(), IoError> {
|
{
|
||||||
let mut wr = Writer::new(wr.by_ref());
|
let mut wr = Writer::new(wr.by_ref());
|
||||||
try!(wr.visit(value));
|
try!(wr.visit(value));
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn to_vec<
|
pub fn to_vec<T>(value: &T) -> Result<Vec<u8>, IoError>
|
||||||
T: ser::Serialize,
|
where T: ser::Serialize,
|
||||||
>(value: &T) -> Result<Vec<u8>, IoError> {
|
{
|
||||||
let mut wr = Vec::with_capacity(128);
|
let mut wr = Vec::with_capacity(128);
|
||||||
to_writer(&mut wr, value).unwrap();
|
to_writer(&mut wr, value).unwrap();
|
||||||
Ok(wr)
|
Ok(wr)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn to_string<
|
pub fn to_string<T>(value: &T) -> Result<Result<String, FromUtf8Error>, IoError>
|
||||||
T: ser::Serialize,
|
where T: ser::Serialize,
|
||||||
>(value: &T) -> Result<Result<String, FromUtf8Error>, IoError> {
|
{
|
||||||
let vec = try!(to_vec(value));
|
let vec = try!(to_vec(value));
|
||||||
Ok(String::from_utf8(vec))
|
Ok(String::from_utf8(vec))
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -6,4 +6,4 @@ extern crate unicode;
|
|||||||
|
|
||||||
pub mod ser;
|
pub mod ser;
|
||||||
pub mod de;
|
pub mod de;
|
||||||
//pub mod json;
|
pub mod json;
|
||||||
|
|||||||
@@ -111,7 +111,6 @@ pub trait Visitor {
|
|||||||
|
|
||||||
fn visit_none(&mut self) -> Result<Self::Value, Self::Error>;
|
fn visit_none(&mut self) -> Result<Self::Value, Self::Error>;
|
||||||
|
|
||||||
#[inline]
|
|
||||||
fn visit_some<V>(&mut self, value: V) -> Result<Self::Value, Self::Error>
|
fn visit_some<V>(&mut self, value: V) -> Result<Self::Value, Self::Error>
|
||||||
where V: Serialize;
|
where V: Serialize;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user