use hedl::{canonicalize, lint, parse, to_json};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let hedl_text = r#"
%V:2.0
%NULL:~
%QUOTE:"
%S:User:[id,name,email,role]
---
users:@User
|alice, Alice Smith, alice@example.com, admin
|bob, Bob Jones, bob@example.com, user
|charlie, Charlie Brown, charlie@example.com, user
config:
max_connections: 100
timeout_ms: 5000
debug: true
"#;
println!("=== Parsing HEDL ===");
let doc = parse(hedl_text)?;
println!("Version: {}.{}", doc.version.0, doc.version.1);
println!("Structs: {:?}", doc.structs.keys().collect::<Vec<_>>());
println!();
println!("=== Canonicalization ===");
let canonical = canonicalize(&doc)?;
println!("{canonical}");
println!();
println!("=== JSON Conversion ===");
let json = to_json(&doc)?;
println!("{json}");
println!();
println!("=== Linting ===");
let diagnostics = lint(&doc);
if diagnostics.is_empty() {
println!("No issues found!");
} else {
for diagnostic in &diagnostics {
println!("{diagnostic}");
}
}
Ok(())
}