extern crate debpkg; use std::env; use std::fs::File; use std::path::Path; use std::process; fn main() { let args: Vec = env::args().collect(); if args.len() != 2 { println!("usage: pkgname "); process::exit(1); } let deb_path = Path::new(&args[1]); if !deb_path.exists() { println!("\"{}\" does not exist", deb_path.display()); process::exit(1); } let deb_file = match File::open(deb_path) { Ok(file) => file, Err(e) => { println!( "ERROR: Failed to open debian file \"{}\"", deb_path.display() ); println!(" {}", e); process::exit(1); } }; let mut pkg = match debpkg::DebPkg::parse(deb_file) { Ok(pkg) => pkg, Err(e) => { println!( "ERROR: Failed to parse debian file \"{}\"", deb_path.display() ); println!(" {}", e); process::exit(1); } }; let control_tar = match pkg.control() { Ok(tar) => tar, Err(e) => { println!( "ERROR: Failed to get control tar from debian file \"{}\"", deb_path.display() ); println!(" {}", e); process::exit(1); } }; let control = match debpkg::Control::extract(control_tar) { Ok(control) => control, Err(e) => { println!( "ERROR: Failed to parse debian control file \"{}\"", deb_path.display() ); println!(" {}", e); process::exit(1); } }; let tags = control.tags(); for tag in tags { if tag.to_lowercase() == "description" { println!("{}: {}", tag, control.short_description().unwrap()); let long_desc = control .long_description() .unwrap() .split('\n') .collect::>() .join("\n "); println!(" {}", long_desc); } else { println!("{}: {}", tag, control.get(tag).unwrap()); } } }