sup-xml 1.3.0

Modern idiomatic Rust API for SupXML
Documentation
fn main() {
    let mut args = std::env::args().skip(1);
    let schema_path = args.next().expect("usage: xsd_smoke <schema.xsd> [instance.xml]");
    let instance_path = args.next();

    let src = std::fs::read_to_string(&schema_path).unwrap();
    let dir = std::path::Path::new(&schema_path).parent()
        .unwrap_or(std::path::Path::new(".")).to_path_buf();
    let resolver = sup_xml::xsd::FsResolver::new(dir);
    let schema = match sup_xml::xsd::Schema::compile_with(&src, resolver) {
        Ok(s) => { println!("schema: compiled OK"); s }
        Err(e) => { println!("schema: rejected: {e}"); return; }
    };
    if let Some(p) = instance_path {
        let inst = std::fs::read_to_string(&p).unwrap();
        match schema.validate_str(&inst) {
            Ok(()) => println!("instance: valid"),
            Err(e) => println!("instance: invalid: {}", e.issues.first()
                .map(|i| i.message.as_str()).unwrap_or("(no issue)")),
        }
    }
}