serde 0.3.3

A generic serialization/deserialization framework
extern crate serde;

use std::collections::BTreeMap;

use serde::json::value::Value;
use serde::json::builder::{ArrayBuilder, ObjectBuilder};

#[test]
fn test_array_builder() {
    let value = ArrayBuilder::new().unwrap();
    assert_eq!(value, Value::Array(Vec::new()));

    let value = ArrayBuilder::new()
        .push(1)
        .push(2)
        .push(3)
        .unwrap();
    assert_eq!(value, Value::Array(vec!(Value::U64(1), Value::U64(2), Value::U64(3))));

    let value = ArrayBuilder::new()
        .push_array(|bld| bld.push(1).push(2).push(3))
        .unwrap();
    assert_eq!(value, Value::Array(vec!(Value::Array(vec!(Value::U64(1), Value::U64(2), Value::U64(3))))));

    let value = ArrayBuilder::new()
        .push_object(|bld|
            bld
                .insert("a".to_string(), 1)
                .insert("b".to_string(), 2))
        .unwrap();

    let mut map = BTreeMap::new();
    map.insert("a".to_string(), Value::U64(1));
    map.insert("b".to_string(), Value::U64(2));
    assert_eq!(value, Value::Array(vec!(Value::Object(map))));
}

#[test]
fn test_object_builder() {
    let value = ObjectBuilder::new().unwrap();
    assert_eq!(value, Value::Object(BTreeMap::new()));

    let value = ObjectBuilder::new()
        .insert("a".to_string(), 1)
        .insert("b".to_string(), 2)
        .unwrap();

    let mut map = BTreeMap::new();
    map.insert("a".to_string(), Value::U64(1));
    map.insert("b".to_string(), Value::U64(2));
    assert_eq!(value, Value::Object(map));
}