///|
/// A JSON round trip for a version and a range. Both serialise as strings, so
/// `to_json` and `from_json` are loss-free. Run with `moon run examples/json`.
///|
fn main raise {
// A version becomes a JSON string and comes back equal.
let v = @moonsver.Version::parse("1.2.3-alpha.1+build.9")
let vj = @json.to_json(v)
println("version json " + vj.stringify())
let back_v : @moonsver.Version = @json.from_json(vj)
println("version back " + back_v.to_string())
println("equal " + (back_v == v).to_string())
// A range serialises as its canonical text, which re-parses to the same set.
let r = @moonsver.Range::parse("^1.2.3")
let rj = @json.to_json(r)
println("range json " + rj.stringify())
let back_r : @moonsver.Range = @json.from_json(rj)
println("range back " + back_r.to_string())
println("equal " + (back_r == r).to_string())
}