]> git.lizzy.rs Git - rust.git/commitdiff
std: add serialize {read,emit}_tuple{,_arg,_struct,_struct_arg}
authorErick Tryzelaar <erick.tryzelaar@gmail.com>
Wed, 10 Apr 2013 02:44:12 +0000 (19:44 -0700)
committerErick Tryzelaar <erick.tryzelaar@gmail.com>
Wed, 10 Apr 2013 23:32:09 +0000 (16:32 -0700)
src/libstd/ebml.rs
src/libstd/json.rs
src/libstd/serialize.rs
src/libsyntax/ext/auto_encode.rs

index 28933d553e6ef168074d9c61afa21ba4f9c1b18d..a7a6e827febe0d1ac0778dbd7f5eed0d66ccf9ef 100644 (file)
@@ -356,6 +356,26 @@ fn read_struct_field<T>(&self, name: &str, idx: uint, f: &fn() -> T) -> T {
             f()
         }
 
+        fn read_tuple<T>(&self, f: &fn(uint) -> T) -> T {
+            debug!("read_tuple()");
+            self.read_seq(f)
+        }
+
+        fn read_tuple_arg<T>(&self, idx: uint, f: &fn() -> T) -> T {
+            debug!("read_tuple_arg(idx=%u)", idx);
+            self.read_seq_elt(idx, f)
+        }
+
+        fn read_tuple_struct<T>(&self, name: &str, f: &fn(uint) -> T) -> T {
+            debug!("read_tuple_struct(name=%?)", name);
+            self.read_tuple(f)
+        }
+
+        fn read_tuple_struct_arg<T>(&self, idx: uint, f: &fn() -> T) -> T {
+            debug!("read_tuple_struct_arg(idx=%u)", idx);
+            self.read_tuple_arg(idx, f)
+        }
+
         fn read_option<T>(&self, f: &fn(bool) -> T) -> T {
             debug!("read_option()");
             do self.read_enum("Option") || {
@@ -637,6 +657,12 @@ fn emit_struct_field(&self, name: &str, _idx: uint, f: &fn()) {
             f()
         }
 
+        fn emit_tuple(&self, len: uint, f: &fn()) { self.emit_seq(len, f) }
+        fn emit_tuple_arg(&self, idx: uint, f: &fn()) { self.emit_seq_elt(idx, f) }
+
+        fn emit_tuple_struct(&self, _name: &str, len: uint, f: &fn()) { self.emit_seq(len, f) }
+        fn emit_tuple_struct_arg(&self, idx: uint, f: &fn()) { self.emit_seq_elt(idx, f) }
+
         fn emit_option(&self, f: &fn()) {
             self.emit_enum("Option", f);
         }
index 4b5e1f142299036438814d418a051e745abd6734..658a6ce281f20c7e98aaa81edbb88e926e1608fe 100644 (file)
@@ -152,6 +152,12 @@ fn emit_struct_field(&self, name: &str, idx: uint, f: &fn()) {
         f();
     }
 
+    fn emit_tuple(&self, len: uint, f: &fn()) { self.emit_seq(len, f) }
+    fn emit_tuple_arg(&self, idx: uint, f: &fn()) { self.emit_seq_elt(idx, f) }
+
+    fn emit_tuple_struct(&self, _name: &str, len: uint, f: &fn()) { self.emit_seq(len, f) }
+    fn emit_tuple_struct_arg(&self, idx: uint, f: &fn()) { self.emit_seq_elt(idx, f) }
+
     fn emit_option(&self, f: &fn()) { f(); }
     fn emit_option_none(&self) { self.emit_nil(); }
     fn emit_option_some(&self, f: &fn()) { f(); }
@@ -291,6 +297,12 @@ fn emit_struct_field(&self, name: &str, idx: uint, f: &fn()) {
         f();
     }
 
+    fn emit_tuple(&self, len: uint, f: &fn()) { self.emit_seq(len, f) }
+    fn emit_tuple_arg(&self, idx: uint, f: &fn()) { self.emit_seq_elt(idx, f) }
+
+    fn emit_tuple_struct(&self, _name: &str, len: uint, f: &fn()) { self.emit_seq(len, f) }
+    fn emit_tuple_struct_arg(&self, idx: uint, f: &fn()) { self.emit_seq_elt(idx, f) }
+
     fn emit_option(&self, f: &fn()) { f(); }
     fn emit_option_none(&self) { self.emit_nil(); }
     fn emit_option_some(&self, f: &fn()) { f(); }
@@ -901,6 +913,26 @@ fn read_struct_field<T>(&self, name: &str, idx: uint, f: &fn() -> T) -> T {
         }
     }
 
+    fn read_tuple<T>(&self, f: &fn(uint) -> T) -> T {
+        debug!("read_tuple()");
+        self.read_seq(f)
+    }
+
+    fn read_tuple_arg<T>(&self, idx: uint, f: &fn() -> T) -> T {
+        debug!("read_tuple_arg(idx=%u)", idx);
+        self.read_seq_elt(idx, f)
+    }
+
+    fn read_tuple_struct<T>(&self, name: &str, f: &fn(uint) -> T) -> T {
+        debug!("read_tuple_struct(name=%?)", name);
+        self.read_tuple(f)
+    }
+
+    fn read_tuple_struct_arg<T>(&self, idx: uint, f: &fn() -> T) -> T {
+        debug!("read_tuple_struct_arg(idx=%u)", idx);
+        self.read_tuple_arg(idx, f)
+    }
+
     fn read_option<T>(&self, f: &fn(bool) -> T) -> T {
         match self.stack.pop() {
             Null => f(false),
index cc3a1ec028983d7d2b93a94447e6a9dd37f3fa32..2a685b2f1d62b9c4030413e614f88ba96ddb4523 100644 (file)
@@ -56,6 +56,12 @@ pub trait Encoder {
     #[cfg(stage3)]
     fn emit_struct_field(&self, f_name: &str, f_idx: uint, f: &fn());
 
+    fn emit_tuple(&self, len: uint, f: &fn());
+    fn emit_tuple_arg(&self, idx: uint, f: &fn());
+
+    fn emit_tuple_struct(&self, name: &str, len: uint, f: &fn());
+    fn emit_tuple_struct_arg(&self, f_idx: uint, f: &fn());
+
     // Specialized types:
     fn emit_option(&self, f: &fn());
     fn emit_option_none(&self);
@@ -102,6 +108,12 @@ pub trait Decoder {
     #[cfg(stage3)]
     fn read_struct_field<T>(&self, f_name: &str, f_idx: uint, f: &fn() -> T) -> T;
 
+    fn read_tuple<T>(&self, f: &fn(uint) -> T) -> T;
+    fn read_tuple_arg<T>(&self, a_idx: uint, f: &fn() -> T) -> T;
+
+    fn read_tuple_struct<T>(&self, s_name: &str, f: &fn(uint) -> T) -> T;
+    fn read_tuple_struct_arg<T>(&self, a_idx: uint, f: &fn() -> T) -> T;
+
     // Specialized types:
     fn read_option<T>(&self, f: &fn(bool) -> T) -> T;
 
index 38bac6b1f438d0482beda794db31f122ed463f3a..287c2d7ba84f81a4dae14fe8423212d7fbf05e57 100644 (file)
@@ -1260,6 +1260,20 @@ fn emit_struct_field(&self, name: &str, +idx: uint, f: &fn()) {
             self.add_to_log(CallToEmitField (name.to_str(),idx)); f();
         }
 
+        fn emit_tuple(&self, _len: uint, f: &fn()) {
+            self.add_unknown_to_log(); f();
+        }
+        fn emit_tuple_arg(&self, _idx: uint, f: &fn()) {
+            self.add_unknown_to_log(); f();
+        }
+
+        fn emit_tuple_struct(&self, _name: &str, _len: uint, f: &fn()) {
+            self.add_unknown_to_log(); f();
+        }
+        fn emit_tuple_struct_arg(&self, _idx: uint, f: &fn()) {
+            self.add_unknown_to_log(); f();
+        }
+
         fn emit_option(&self, f: &fn()) {
             self.add_to_log(CallToEmitOption);
             f();