Merge ser::Serializer and ser::Visitor

This commit is contained in:
Erick Tryzelaar
2015-03-11 11:05:46 -07:00
parent fbd6d1974a
commit 3f62b6d2bf
6 changed files with 179 additions and 225 deletions
+10 -22
View File
@@ -21,17 +21,17 @@ pub enum Value {
impl ser::Serialize for Value {
#[inline]
fn visit<V>(&self, visitor: &mut V) -> Result<(), V::Error>
where V: ser::Visitor,
fn visit<S>(&self, serializer: &mut S) -> Result<(), S::Error>
where S: ser::Serializer,
{
match *self {
Value::Null => visitor.visit_unit(),
Value::Bool(v) => visitor.visit_bool(v),
Value::I64(v) => visitor.visit_i64(v),
Value::F64(v) => visitor.visit_f64(v),
Value::String(ref v) => visitor.visit_str(&v),
Value::Array(ref v) => v.visit(visitor),
Value::Object(ref v) => v.visit(visitor),
Value::Null => serializer.visit_unit(),
Value::Bool(v) => serializer.visit_bool(v),
Value::I64(v) => serializer.visit_i64(v),
Value::F64(v) => serializer.visit_f64(v),
Value::String(ref v) => serializer.visit_str(&v),
Value::Array(ref v) => v.visit(serializer),
Value::Object(ref v) => v.visit(serializer),
}
}
}
@@ -165,18 +165,6 @@ impl Serializer {
impl ser::Serializer for Serializer {
type Error = ();
#[inline]
fn visit<T>(&mut self, value: &T) -> Result<(), ()>
where T: ser::Serialize,
{
try!(value.visit(self));
Ok(())
}
}
impl ser::Visitor for Serializer {
type Error = ();
#[inline]
fn visit_bool(&mut self, value: bool) -> Result<(), ()> {
self.state.push(State::Value(Value::Bool(value)));
@@ -589,7 +577,7 @@ pub fn to_value<T>(value: &T) -> Value
where T: ser::Serialize
{
let mut ser = Serializer::new();
ser::Serializer::visit(&mut ser, value).ok().unwrap();
value.visit(&mut ser).ok().unwrap();
ser.unwrap()
}