summary refs log tree commit diff
path: root/src/libstd/json.rs
diff options
context:
space:
mode:
authorErick Tryzelaar <erick.tryzelaar@gmail.com>2013-04-09 19:45:10 -0700
committerErick Tryzelaar <erick.tryzelaar@gmail.com>2013-04-10 16:32:09 -0700
commitf3ab67ec5f75fc3376e5647dfb7e5b46a535dea7 (patch)
tree083fcfea436e9d43ca32cf59a08dfa263e1bf91d /src/libstd/json.rs
parente31f7b7c74f54cc80f908dc074f3efb95e5b36d5 (diff)
downloadrust-f3ab67ec5f75fc3376e5647dfb7e5b46a535dea7.tar.gz
rust-f3ab67ec5f75fc3376e5647dfb7e5b46a535dea7.zip
syntax: add {read,emit}_enum_struct_variant{,_field}
Diffstat (limited to 'src/libstd/json.rs')
-rw-r--r--src/libstd/json.rs33
1 files changed, 32 insertions, 1 deletions
diff --git a/src/libstd/json.rs b/src/libstd/json.rs
index 658a6ce281f..f5cd8b4bd68 100644
--- a/src/libstd/json.rs
+++ b/src/libstd/json.rs
@@ -109,6 +109,7 @@ impl serialize::Encoder for Encoder {
     fn emit_str(&self, v: &str) { self.wr.write_str(escape_str(v)) }
 
     fn emit_enum(&self, _name: &str, f: &fn()) { f() }
+
     fn emit_enum_variant(&self, name: &str, _id: uint, cnt: uint, f: &fn()) {
         // enums are encoded as strings or vectors:
         // Bunny => "Bunny"
@@ -126,10 +127,18 @@ impl serialize::Encoder for Encoder {
     }
 
     fn emit_enum_variant_arg(&self, idx: uint, f: &fn()) {
-        if (idx != 0) {self.wr.write_char(',');}
+        if idx != 0 {self.wr.write_char(',');}
         f();
     }
 
+    fn emit_enum_struct_variant(&self, name: &str, id: uint, cnt: uint, f: &fn()) {
+        self.emit_enum_variant(name, id, cnt, f)
+    }
+
+    fn emit_enum_struct_variant_field(&self, _field: &str, idx: uint, f: &fn()) {
+        self.emit_enum_variant_arg(idx, f)
+    }
+
     fn emit_struct(&self, _name: &str, _len: uint, f: &fn()) {
         self.wr.write_char('{');
         f();
@@ -232,6 +241,7 @@ impl serialize::Encoder for PrettyEncoder {
     fn emit_str(&self, v: &str) { self.wr.write_str(escape_str(v)); }
 
     fn emit_enum(&self, _name: &str, f: &fn()) { f() }
+
     fn emit_enum_variant(&self, name: &str, _id: uint, cnt: uint, f: &fn()) {
         if cnt == 0 {
             self.wr.write_str(escape_str(name));
@@ -249,6 +259,7 @@ impl serialize::Encoder for PrettyEncoder {
             self.wr.write_char(']');
         }
     }
+
     fn emit_enum_variant_arg(&self, idx: uint, f: &fn()) {
         if idx != 0 {
             self.wr.write_str(",\n");
@@ -257,6 +268,15 @@ impl serialize::Encoder for PrettyEncoder {
         f()
     }
 
+    fn emit_enum_struct_variant(&self, name: &str, id: uint, cnt: uint, f: &fn()) {
+        self.emit_enum_variant(name, id, cnt, f)
+    }
+
+    fn emit_enum_struct_variant_field(&self, _field: &str, idx: uint, f: &fn()) {
+        self.emit_enum_variant_arg(idx, f)
+    }
+
+
     fn emit_struct(&self, _name: &str, len: uint, f: &fn()) {
         if len == 0 {
             self.wr.write_str("{}");
@@ -864,6 +884,17 @@ impl serialize::Decoder for Decoder {
         f()
     }
 
+    fn read_enum_struct_variant<T>(&self, names: &[&str], f: &fn(uint) -> T) -> T {
+        debug!("read_enum_struct_variant(names=%?)", names);
+        self.read_enum_variant(names, f)
+    }
+
+
+    fn read_enum_struct_variant_field<T>(&self, name: &str, idx: uint, f: &fn() -> T) -> T {
+        debug!("read_enum_struct_variant_field(name=%?, idx=%u)", name, idx);
+        self.read_enum_variant_arg(idx, f)
+    }
+
     fn read_struct<T>(&self, name: &str, len: uint, f: &fn() -> T) -> T {
         debug!("read_struct(name=%s, len=%u)", name, len);
         let value = f();