1
Fork 0

libstd: make Serializer a trait-level typaram

This commit is contained in:
Erick Tryzelaar 2012-10-13 09:11:33 -07:00 committed by Niko Matsakis
parent 07edf90367
commit ab89b5c294
5 changed files with 692 additions and 77 deletions

View file

@ -273,6 +273,7 @@ pub impl PrettySerializer: serialization::Serializer {
}
}
#[cfg(stage0)]
pub impl Json: serialization::Serializable {
fn serialize<S: serialization::Serializer>(&self, s: &S) {
match *self {
@ -296,6 +297,33 @@ pub impl Json: serialization::Serializable {
}
}
#[cfg(stage1)]
#[cfg(stage2)]
pub impl<
S: serialization::Serializer
> Json: serialization::Serializable<S> {
fn serialize(&self, s: &S) {
match *self {
Number(v) => v.serialize(s),
String(ref v) => v.serialize(s),
Boolean(v) => v.serialize(s),
List(v) => v.serialize(s),
Object(ref v) => {
do s.emit_rec || {
let mut idx = 0;
for v.each |key, value| {
do s.emit_field(*key, idx) {
value.serialize(s);
}
idx += 1;
}
}
},
Null => s.emit_nil(),
}
}
}
/// Serializes a json value into a io::writer
pub fn to_writer(wr: io::Writer, json: &Json) {
json.serialize(&Serializer(wr))