From 1600be2c3b1054e2fce59778e2f85d7fa582657f Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Wed, 14 Mar 2012 17:18:53 -0400 Subject: fix auto_serialize for enums with type parameters --- src/libstd/serialization.rs | 148 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) (limited to 'src/libstd') diff --git a/src/libstd/serialization.rs b/src/libstd/serialization.rs index 64208c0af48..3734b8db2c0 100644 --- a/src/libstd/serialization.rs +++ b/src/libstd/serialization.rs @@ -120,3 +120,151 @@ fn serialize_uint(s: S, v: uint) { fn deserialize_uint(d: D) -> uint { d.read_uint() } + +fn serialize_u8(s: S, v: u8) { + s.emit_u8(v); +} + +fn deserialize_u8(d: D) -> u8 { + d.read_u8() +} + +fn serialize_u16(s: S, v: u16) { + s.emit_u16(v); +} + +fn deserialize_u16(d: D) -> u16 { + d.read_u16() +} + +fn serialize_u32(s: S, v: u32) { + s.emit_u32(v); +} + +fn deserialize_u32(d: D) -> u32 { + d.read_u32() +} + +fn serialize_u64(s: S, v: u64) { + s.emit_u64(v); +} + +fn deserialize_u64(d: D) -> u64 { + d.read_u64() +} + +fn serialize_int(s: S, v: int) { + s.emit_int(v); +} + +fn deserialize_int(d: D) -> int { + d.read_int() +} + +fn serialize_i8(s: S, v: i8) { + s.emit_i8(v); +} + +fn deserialize_i8(d: D) -> i8 { + d.read_i8() +} + +fn serialize_i16(s: S, v: i16) { + s.emit_i16(v); +} + +fn deserialize_i16(d: D) -> i16 { + d.read_i16() +} + +fn serialize_i32(s: S, v: i32) { + s.emit_i32(v); +} + +fn deserialize_i32(d: D) -> i32 { + d.read_i32() +} + +fn serialize_i64(s: S, v: i64) { + s.emit_i64(v); +} + +fn deserialize_i64(d: D) -> i64 { + d.read_i64() +} + +fn serialize_str(s: S, v: str) { + s.emit_str(v); +} + +fn deserialize_str(d: D) -> str { + d.read_str() +} + +fn serialize_float(s: S, v: float) { + s.emit_float(v); +} + +fn deserialize_float(d: D) -> float { + d.read_float() +} + +fn serialize_f32(s: S, v: f32) { + s.emit_f32(v); +} + +fn deserialize_f32(d: D) -> f32 { + d.read_f32() +} + +fn serialize_f64(s: S, v: f64) { + s.emit_f64(v); +} + +fn deserialize_f64(d: D) -> f64 { + d.read_f64() +} + +fn serialize_bool(s: S, v: bool) { + s.emit_bool(v); +} + +fn deserialize_bool(d: D) -> bool { + d.read_bool() +} + +fn serialize_option(s: S, v: option, st: fn(T)) { + s.emit_enum("option") {|| + alt v { + none { + s.emit_enum_variant("none", 0u, 0u) {|| + } + } + + some(v) { + s.emit_enum_variant("some", 1u, 1u) {|| + s.emit_enum_variant_arg(0u) {|| + st(v) + } + } + } + } + } +} + +fn deserialize_option(d: D, st: fn() -> T) -> option { + d.read_enum("option") {|| + d.read_enum_variant {|i| + alt check i { + 0u { // none + none + } + 1u { // some(v) + some(d.read_enum_variant_arg(0u) {|| + st() + }) + } + } + } + } +} -- cgit 1.4.1-3-g733a5