use adapters::Value;
use adapters::json::{parse, stringify, stringify_pretty};
use std::collections::BTreeMap;
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== json_parsing example ===\n");
let samples = [
"null",
"true",
"false",
"42",
"-7",
"3.14",
r#""hello world""#,
"[]",
"{}",
r#"[1, "two", null, false, 3.14]"#,
r#"{"name":"alice","age":30,"active":true}"#,
];
for s in &samples {
let v = parse(s)?;
let out = stringify(&v)?;
println!("Input: {s}");
println!("Parsed: {:?}", v);
println!("Output: {out}\n");
}
let unicode = r#""\u0048\u0065\u006C\u006C\u006F \u4e16\u754c""#;
let v = parse(unicode)?;
println!("Unicode: {} → {:?}\n", unicode, v);
let empty_obj = parse("{}")?;
let empty_arr = parse("[]")?;
println!("Empty object: {:?}", empty_obj);
println!("Empty array: {:?}\n", empty_arr);
let mut m = BTreeMap::new();
m.insert("name".to_string(), Value::String("Bob".into()));
m.insert(
"scores".to_string(),
Value::Array(vec![Value::Int(10), Value::Int(20)]),
);
let obj = Value::Object(m);
println!("Pretty printed:\n{}", stringify_pretty(&obj)?);
match parse("{invalid}") {
Ok(_) => println!("Unexpected success"),
Err(e) => println!("Parse error (expected): {}", e),
}
Ok(())
}