about summary refs log tree commit diff
path: root/src/libstd/json.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstd/json.rs')
-rw-r--r--src/libstd/json.rs28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/libstd/json.rs b/src/libstd/json.rs
index 0d3391c1867..d170255b565 100644
--- a/src/libstd/json.rs
+++ b/src/libstd/json.rs
@@ -273,6 +273,7 @@ pub impl PrettySerializer: serialization::Serializer {
     }
 }
 
+#[cfg(stage0)]
 pub impl Json: serialization::Serializable {
     fn serialize<S: serialization::Serializer>(&self, s: &S) {
         match *self {
@@ -296,6 +297,33 @@ pub impl Json: serialization::Serializable {
     }
 }
 
+#[cfg(stage1)]
+#[cfg(stage2)]
+pub impl<
+    S: serialization::Serializer
+> Json: serialization::Serializable<S> {
+    fn serialize(&self, s: &S) {
+        match *self {
+            Number(v) => v.serialize(s),
+            String(ref v) => v.serialize(s),
+            Boolean(v) => v.serialize(s),
+            List(v) => v.serialize(s),
+            Object(ref v) => {
+                do s.emit_rec || {
+                    let mut idx = 0;
+                    for v.each |key, value| {
+                        do s.emit_field(*key, idx) {
+                            value.serialize(s);
+                        }
+                        idx += 1;
+                    }
+                }
+            },
+            Null => s.emit_nil(),
+        }
+    }
+}
+
 /// Serializes a json value into a io::writer
 pub fn to_writer(wr: io::Writer, json: &Json) {
     json.serialize(&Serializer(wr))