diff options
| author | Erick Tryzelaar <erick.tryzelaar@gmail.com> | 2012-10-13 09:11:33 -0700 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2012-10-15 08:25:23 -0700 |
| commit | ab89b5c294ac511d4d58809f9f20dfe4f2c8fe52 (patch) | |
| tree | e1374cc163794698bda233cdba3b32416820ab7b /src/libstd/json.rs | |
| parent | 07edf9036715bde27cc7bbc0feb3ee6e461130da (diff) | |
| download | rust-ab89b5c294ac511d4d58809f9f20dfe4f2c8fe52.tar.gz rust-ab89b5c294ac511d4d58809f9f20dfe4f2c8fe52.zip | |
libstd: make Serializer a trait-level typaram
Diffstat (limited to 'src/libstd/json.rs')
| -rw-r--r-- | src/libstd/json.rs | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/libstd/json.rs b/src/libstd/json.rs index 0d3391c1867..d170255b565 100644 --- a/src/libstd/json.rs +++ b/src/libstd/json.rs @@ -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)) |
