about summary refs log tree commit diff
path: root/src/libstd/json.rs
diff options
context:
space:
mode:
authorErick Tryzelaar <erick.tryzelaar@gmail.com>2012-10-13 09:11:33 -0700
committerNiko Matsakis <niko@alum.mit.edu>2012-10-15 08:25:23 -0700
commitab89b5c294ac511d4d58809f9f20dfe4f2c8fe52 (patch)
treee1374cc163794698bda233cdba3b32416820ab7b /src/libstd/json.rs
parent07edf9036715bde27cc7bbc0feb3ee6e461130da (diff)
downloadrust-ab89b5c294ac511d4d58809f9f20dfe4f2c8fe52.tar.gz
rust-ab89b5c294ac511d4d58809f9f20dfe4f2c8fe52.zip
libstd: make Serializer a trait-level typaram
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))