@@ -23,23 +23,23 @@ For example, a type like:
23
23
24
24
would generate two implementations like:
25
25
26
- impl<S: Encoder> node_id: Encodable<S> {
27
- fn encode(s: &S) {
28
- do s.emit_struct("Node", 1) {
29
- s.emit_field("id", 0, || s.emit_uint(self))
30
- }
26
+ impl<S: std::serialize::Encoder> Node: Encodable<S> {
27
+ fn encode(&self, s: &S) {
28
+ do s.emit_struct("Node", 1) {
29
+ s.emit_field("id", 0, || s.emit_uint(self.id))
31
30
}
32
31
}
32
+ }
33
33
34
- impl<D: Decoder> node_id: Decodable {
35
- static fn decode(d: &D) -> Node {
36
- do d.read_struct("Node", 1) {
37
- Node {
38
- id: d.read_field(~"x", 0, || decode(d))
39
- }
34
+ impl<D: Decoder> node_id: Decodable {
35
+ static fn decode(d: &D) -> Node {
36
+ do d.read_struct("Node", 1) {
37
+ Node {
38
+ id: d.read_field(~"x", 0, || decode(d))
40
39
}
41
40
}
42
41
}
42
+ }
43
43
44
44
Other interesting scenarios are whe the item has type parameters or
45
45
references other non-built-in types. A type definition like:
@@ -1150,3 +1150,42 @@ fn mk_enum_deser_body(
1150
1150
]
1151
1151
)
1152
1152
}
1153
+
1154
+
1155
+ #[cfg(test)]
1156
+ mod test {
1157
+ use std::serialize::Encodable;
1158
+ use core::dvec::*;
1159
+ use util::testing::*;
1160
+ use core::io;
1161
+ use core::str;
1162
+ use std;
1163
+
1164
+
1165
+ #[auto_decode]
1166
+ #[auto_encode]
1167
+ struct Node {id: uint}
1168
+
1169
+ fn to_json_str (val: Encodable<std::json::Encoder>) -> ~str{
1170
+ let bw = @io::BytesWriter {bytes: DVec(), pos: 0};
1171
+ val.encode(~std::json::Encoder(bw as io::Writer));
1172
+ str::from_bytes(bw.bytes.data)
1173
+ }
1174
+
1175
+ #[test] fn encode_test () {
1176
+ check_equal (to_json_str(Node{id:34} as Encodable::<std::json::Encoder>),~" { \" id\" : 34 } ");
1177
+ }
1178
+
1179
+ #[auto_encode]
1180
+ enum written {
1181
+ Book(int),
1182
+ Magazine(~str)
1183
+ }
1184
+
1185
+ #[test] fn json_enum_encode_test () {
1186
+ check_equal (to_json_str(Book(9) as Encodable::<std::json::Encoder>),
1187
+ ~" [ \" Book \" , 9 ] ");
1188
+ check_equal (to_json_str(Magazine(~" Paris Match ") as Encodable::<std::json::Encoder>),
1189
+ ~" [ \" Magazine \" , \" Paris Match \" ] ") ;
1190
+ }
1191
+ }
0 commit comments