Skip to content

Commit

Permalink
Fix my merge
Browse files Browse the repository at this point in the history
  • Loading branch information
14427 committed Oct 4, 2012
1 parent efcd238 commit 455591d
Showing 1 changed file with 0 additions and 130 deletions.
130 changes: 0 additions & 130 deletions src/libstd/json.rs
Expand Up @@ -27,136 +27,6 @@ pub struct Error {
line: uint,
col: uint,
msg: @~str,
};

/// Serializes a json value into a io::writer
fn to_writer(wr: io::Writer, j: Json) {
match j {
Num(n) => wr.write_str(float::to_str(n, 6u)),
String(s) => wr.write_str(escape_str(*s)),
Boolean(b) => wr.write_str(if b { ~"true" } else { ~"false" }),
List(v) => {
wr.write_char('[');
let mut first = true;
for (*v).each |item| {
if !first {
wr.write_str(~", ");
}
first = false;
to_writer(wr, *item);
};
wr.write_char(']');
}
Dict(d) => {
if d.size() == 0u {
wr.write_str(~"{}");
return;
}

wr.write_str(~"{ ");
let mut first = true;
for d.each |key, value| {
if !first {
wr.write_str(~", ");
}
first = false;
wr.write_str(escape_str(key));
wr.write_str(~": ");
to_writer(wr, value);
};
wr.write_str(~" }");
}
Null => wr.write_str(~"null")
}
}

/// Serializes a json value into a io::writer
fn to_writer_pretty(wr: io::Writer, j: Json, indent: uint) {
fn spaces(n: uint) -> ~str {
let mut ss = ~"";
for n.times { str::push_str(&mut ss, " "); }
return ss;
}

match j {
Num(n) => wr.write_str(float::to_str(n, 6u)),
String(s) => wr.write_str(escape_str(*s)),
Boolean(b) => wr.write_str(if b { ~"true" } else { ~"false" }),
List(vv) => {
if vv.len() == 0u {
wr.write_str(~"[]");
return;
}

let inner_indent = indent + 2;

// [
wr.write_str("[\n");
wr.write_str(spaces(inner_indent));

// [ elem,
// elem,
// elem ]
let mut first = true;
for (*vv).each |item| {
if !first {
wr.write_str(~",\n");
wr.write_str(spaces(inner_indent));
}
first = false;
to_writer_pretty(wr, *item, inner_indent);
};

// ]
wr.write_str("\n");
wr.write_str(spaces(indent));
wr.write_str(~"]");
}
Dict(dd) => {
if dd.size() == 0u {
wr.write_str(~"{}");
return;
}

let inner_indent = indent + 2;

// convert from a dictionary
let mut pairs = ~[];
for dd.each |key, value| {
vec::push(pairs, (key, value));
}

// sort by key strings
let sorted_pairs = do sort::merge_sort(pairs) |a,b| { *a <= *b };

// {
wr.write_str(~"{\n");
wr.write_str(spaces(inner_indent));

// { k: v,
// k: v,
// k: v }
let mut first = true;
for sorted_pairs.each |kv| {
let (key, value) = *kv;
if !first {
wr.write_str(~",\n");
wr.write_str(spaces(inner_indent));
}
first = false;
let key = str::append(escape_str(key), ~": ");
let key_indent = inner_indent + str::len(key);
wr.write_str(key);
to_writer_pretty(wr, value, key_indent);
};
// }
wr.write_str(~"\n");
wr.write_str(spaces(indent));
wr.write_str(~"}");
}
Null => wr.write_str(~"null")
}
}

fn escape_str(s: &str) -> ~str {
Expand Down

0 comments on commit 455591d

Please sign in to comment.