use adapters::{Adapter, Validate};
use adapters_macros::Schema;
#[derive(Schema, Debug)]
struct Profile {
name: String,
bio: Option<String>,
#[schema(default = "India")]
country: String,
#[schema(default = 0)]
score: i32,
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== optional_defaults example ===\n");
let full = Profile::from_json(
r#"{
"name": "Alice",
"bio": "Rust enthusiast",
"country": "USA",
"score": 42
}"#,
)?;
println!("Full: {:?}", full);
let minimal = Profile::from_json(r#"{"name": "Bob"}"#)?;
println!("Minimal: {:?}", minimal);
assert!(minimal.bio.is_none());
assert_eq!(minimal.country, "India");
assert_eq!(minimal.score, 0);
println!("bio is None: {}", minimal.bio.is_none());
println!("country default: {}", minimal.country);
println!("score default: {}", minimal.score);
let with_null = Profile::from_json(r#"{"name": "Carol", "bio": null}"#)?;
println!("\nWith explicit null bio: {:?}", with_null);
assert!(with_null.bio.is_none());
full.validate()?;
minimal.validate()?;
println!("\nAll valid!");
Ok(())
}