use laminate::{FlexValue, Laminate};
use std::collections::HashMap;
#[derive(Debug, Laminate)]
struct User {
name: String,
#[laminate(coerce)]
age: u32,
#[laminate(coerce)]
verified: bool,
#[laminate(coerce, default)]
score: f64,
#[laminate(overflow)]
extra: HashMap<String, serde_json::Value>,
}
fn main() {
let api_response = r#"{
"name": "Alice",
"age": "28",
"verified": "true",
"score": "95.5",
"department": "engineering",
"start_date": "2024-01-15"
}"#;
let (user, diagnostics) = User::from_json(api_response).unwrap();
println!("User: {} (age {})", user.name, user.age);
println!("Verified: {}", user.verified);
println!("Score: {}", user.score);
println!(
"Extra fields preserved: {:?}",
user.extra.keys().collect::<Vec<_>>()
);
println!("\nDiagnostics ({} total):", diagnostics.len());
for d in &diagnostics {
println!(" {}", d);
}
let value = user.to_value();
println!("\nRound-trip JSON:");
println!("{}", serde_json::to_string_pretty(&value).unwrap());
}