use toon_format_rs::{parse, to_string};
fn main() {
let input = r#"context:
task: Our favorite hikes together
location: Boulder
season: spring_2025
friends[3]: ana,luis,sam
hikes[3]{id,name,distanceKm,elevationGain,companion,wasSunny}:
1,Blue Lake Trail,7.5,320,ana,true
2,Ridge Overlook,9.2,540,luis,false
3,Wildflower Loop,5.1,180,sam,true"#;
let value = parse(input).expect("Failed to parse TOON");
println!("Parsed TOON value:");
println!("{:#?}\n", value);
if let Some(context) = value.get("context") {
println!("Task: {}", context.get("task").unwrap().as_str().unwrap());
}
if let Some(friends) = value.get("friends") {
println!("Number of friends: {}", friends.len());
}
if let Some(hikes) = value.get("hikes") {
println!("\nHikes:");
for hike in hikes.as_array().unwrap() {
let h = hike.as_object().unwrap();
println!(
" - {}: {}km, {}m gain",
h.get("name").unwrap().as_str().unwrap(),
h.get("distanceKm").unwrap().as_f64().unwrap(),
h.get("elevationGain").unwrap().as_i64().unwrap()
);
}
}
let output = to_string(&value).expect("Failed to serialize");
println!("\nSerialized back to TOON:\n{}", output);
}