Skip to content

Commit ab89b5c

Browse files
ericktnikomatsakis
authored andcommitted
libstd: make Serializer a trait-level typaram
1 parent 07edf90 commit ab89b5c

File tree

5 files changed

+698
-83
lines changed

5 files changed

+698
-83
lines changed

src/libstd/json.rs

+28
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,7 @@ pub impl PrettySerializer: serialization::Serializer {
273273
}
274274
}
275275

276+
#[cfg(stage0)]
276277
pub impl Json: serialization::Serializable {
277278
fn serialize<S: serialization::Serializer>(&self, s: &S) {
278279
match *self {
@@ -296,6 +297,33 @@ pub impl Json: serialization::Serializable {
296297
}
297298
}
298299

300+
#[cfg(stage1)]
301+
#[cfg(stage2)]
302+
pub impl<
303+
S: serialization::Serializer
304+
> Json: serialization::Serializable<S> {
305+
fn serialize(&self, s: &S) {
306+
match *self {
307+
Number(v) => v.serialize(s),
308+
String(ref v) => v.serialize(s),
309+
Boolean(v) => v.serialize(s),
310+
List(v) => v.serialize(s),
311+
Object(ref v) => {
312+
do s.emit_rec || {
313+
let mut idx = 0;
314+
for v.each |key, value| {
315+
do s.emit_field(*key, idx) {
316+
value.serialize(s);
317+
}
318+
idx += 1;
319+
}
320+
}
321+
},
322+
Null => s.emit_nil(),
323+
}
324+
}
325+
}
326+
299327
/// Serializes a json value into a io::writer
300328
pub fn to_writer(wr: io::Writer, json: &Json) {
301329
json.serialize(&Serializer(wr))

0 commit comments

Comments
 (0)