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);
}
}
}