interfaces2 0.0.5

A Rust library for interacting with network interfaces
Documentation
extern crate interfaces2;

use std::env;
use std::process::exit;

use interfaces2::Interface;


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

    if args.len() != 3 {
        usage();
    }
    let new_status = match &*args[1] {
        "up" => true,
        "down" => false,
        _ => usage(),
    };

    let ifname = &args[2];
    let mut i = match Interface::get_by_name(ifname) {
        Ok(Some(i)) => i,
        Ok(None) => {
            println!("Could not find an interface named: {}", ifname);
            return;
        },
        Err(e) => {
            println!("An error occured fetching interfaces: {:?}", e);
            return;
        },
    };

    println!("Interface {} was {}", i.name, if i.is_up() { "up" } else { "down" });
    match i.set_up(new_status) {
        Ok(_) => {
            println!("Successfully set interface status");
            println!("Interface is now {}", if new_status { "up" } else { "down" });
        },
        Err(e) => {
            println!("Could not set interface status: {:?}", e);
        },
    };
}

fn usage() -> ! {
    println!("Usage: {} up/down <interface>", env::args().next().unwrap());
    exit(1);
}