libparted 0.1.5

Rust wrappers for libparted
Documentation
extern crate libparted;

use libparted::*;
use std::env::args;
use std::process::exit;

fn main() {
    let args = args().collect::<Vec<String>>();
    if args.len() != 2 {
        eprintln!("a device must be specified");
        exit(1);
    }

    let mut device = match Device::get(&args[1]) {
        Ok(device) => device,
        Err(why) => {
            eprintln!("unable to get {} device: {}", args[1], why);
            exit(1);
        }
    };

    match device.get_minimum_alignment() {
        Some(alignment) => println!("minimum: {} {}", alignment.offset(), alignment.grain_size()),
        None => println!("minimum: - -"),
    }

    match device.get_optimum_alignment() {
        Some(alignment) => println!("optimum: {} {}", alignment.offset(), alignment.grain_size()),
        None => println!("optimum: - -"),
    }

    let disk = match Disk::new(&mut device) {
        Ok(disk) => disk,
        Err(why) => {
            eprintln!("unable to open disk from {} device: {}", args[1], why);
            exit(1);
        }
    };

    match disk.get_partition_alignment() {
        Ok(alignment) => println!(
            "partition alignment: {} {}",
            alignment.offset(),
            alignment.grain_size()
        ),
        Err(why) => {
            eprintln!(
                "unable to get disk partition alignment from {}: {}",
                args[1], why
            );
            exit(1);
        }
    }

    drop(disk);
}