libstd: make Serializer a trait-level typaram
This commit is contained in:
parent
07edf90367
commit
ab89b5c294
5 changed files with 692 additions and 77 deletions
|
@ -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))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue