///|
/// Convert a parsed TOML document to a plain JSON value: tables become
/// objects, arrays stay arrays, and datetimes become their TOML string
/// form. Integers keep their exact 64-bit decimal representation, and
/// non-finite floats become the strings "nan"/"inf"/"-inf" since JSON
/// cannot represent them as numbers.
fn to_json(value : @toml_lib.TomlValue) -> Json {
match value {
TomlString(s) => Json::string(s)
TomlInteger(i) => Json::number(i.to_double(), repr=i.to_string())
TomlFloat(f) =>
if f.is_nan() {
Json::string("nan")
} else if f.is_inf() {
Json::string(if f < 0.0 { "-inf" } else { "inf" })
} else {
Json::number(f)
}
TomlBoolean(b) => Json::boolean(b)
TomlDateTime(_) => {
let (_, s) = value.datetime_info().unwrap()
Json::string(s)
}
TomlArray(arr) => Json::array([ for v in arr => to_json(v) ])
TomlTable(table) =>
Json::object(Map::from_array([ for k, v in table => (k, to_json(v)) ]))
}
}