battery 0.3.1

Cross-platform information about batteries
Documentation
extern crate battery;

use std::time::Duration;

use humantime::format_duration;

fn format(val: Option<Duration>) -> String {
    let d = match val {
        Some(duration) => duration,
        None => Duration::from_secs(0),
    };

    format_duration(d).to_string()
}

fn main() {
    for (idx, bat) in battery::get().enumerate() {
        println!("Device:\t\t\t{}", idx);
        println!("vendor:\t\t\t{}", bat.vendor().unwrap_or("N/A"));
        println!("model:\t\t\t{}", bat.model().unwrap_or("N/A"));
        println!("S/N:\t\t\t{}", bat.serial_number().unwrap_or("N/A"));
        println!("battery");
        println!("  state:\t\t{}", bat.state());
        println!("  energy:\t\t{:.2} Wh", bat.energy());
        println!("  energy-full:\t\t{:.2} Wh", bat.energy_full());
        println!("  energy-full-design:\t{:.2} Wh", bat.energy_full_design());
        println!("  energy-rate:\t\t{:.2} Wh", bat.energy_rate());
        println!("  voltage:\t\t{:.2} V", bat.voltage());
        match bat.state() {
            battery::State::Discharging => {
                println!("  time-to-empty\t\t{}", format(bat.time_to_empty()));
            },
            battery::State::Charging => {
                println!("  time-to-full\t\t{}", format(bat.time_to_full()));
            },
            _ => {},
        }
        println!("  percentage:\t\t{:.2}%", bat.percentage());
        println!("  temperature:\t\t{:.2} °C", bat.temperature());
        println!("  technology:\t\t{}", bat.technology());
    }
}