webdav-serde 0.1.2

webdav-serde
Documentation
use std::env;
use std::fs;
use std::process;
use webdav_serde::Multistatus;

fn main() {
    let args: Vec<String> = env::args().collect();

    if args.len() < 2 {
        eprintln!("Usage: {} <xml_file_path>", args[0]);
        eprintln!("Example: {} xml/list.xml", args[0]);
        process::exit(1);
    }

    let file_path = &args[1];

    let src = fs::read_to_string(file_path).unwrap_or_else(|err| {
        eprintln!("Error reading file '{}': {}", file_path, err);
        process::exit(1);
    });

    let multistatus = Multistatus::from_xml(&src).unwrap_or_else(|err| {
        eprintln!("Error parsing XML: {}", err);
        process::exit(1);
    });

    println!("{:#?}", multistatus);
    
    println!("\n--- Summary ---");
    println!("Total items: {}", multistatus.response.len());
    
    let collections: Vec<_> = multistatus.response.iter()
        .filter(|r| r.is_collection())
        .collect();
    let files: Vec<_> = multistatus.response.iter()
        .filter(|r| !r.is_collection())
        .collect();
    
    println!("Collections: {}", collections.len());
    println!("Files: {}", files.len());
    
    if !files.is_empty() {
        println!("\n--- Files ---");
        for file in files {
            let size = file.propstat.prop.getcontentlength
                .map(|s| format!("{} bytes", s))
                .unwrap_or_else(|| "unknown".to_string());
            println!("  {} - {}", file.name(), size);
        }
    }
}