Basic Schema Validation & Serialization
This example demonstrates how to use the declarative #[derive(Schema)] macro to define metadata, run dynamic JSON validation, self-validate instances, and output serialized JSON strings.
Compilable Example
//! basic_schema example — demonstrates #[derive(Schema)], from_json, validate, to_json. use adapters::{Adapter, SchemaProvider, Validate}; use adapters_macros::Schema; #[derive(Schema, Debug)] struct User { #[schema(min_length = 3, max_length = 32)] username: String, #[schema(email)] email: String, #[schema(min = 18, max = 120)] age: u8, } fn main() -> Result<(), Box<dyn std::error::Error>> { println!("=== basic_schema example ===\n"); // Valid user let json = r#"{"username": "alice", "email": "alice@example.com", "age": 25}"#; let user = User::from_json(json)?; println!("Parsed: {:?}", user); user.validate()?; println!("Valid!"); let out = user.to_json()?; println!("Serialized: {}", out); let schema = User::schema(); println!("Schema type: {:?}", schema); // Validation failure println!("\n--- Testing bad input ---"); let bad_result = User::from_json(r#"{"username": "ab", "email": "not-an-email", "age": 10}"#); match bad_result { Ok(_) => println!("Unexpectedly parsed"), Err(e) => println!("Validation error (expected): {}", e), } Ok(()) }