rfyl 0.3.1

A dice roller accepting dice notation.
Documentation
extern crate rfyl;
extern crate time;

use std::{env, io};
use std::process::exit;
use io::Write;
use rfyl::roll as roll;
use time::PreciseTime;

const VERSION: &'static str = env!("CARGO_PKG_VERSION");

fn main() {
    println!("Running rfyl version {}", VERSION);
    println!("");
    io::stdout().flush().expect("[Error] Flush failed!");
    let args: Vec<_> = env::args().collect();
    if args.len() > 1 {
        let mut input_string = String::new();

        for (i, e) in args.iter().enumerate() {
            if i == 0 { continue; }
            input_string.push_str(e.as_ref());
        }

        let start = PreciseTime::now();
        let roll = match roll(input_string) {
            Ok(v) => v,
            Err(e) => {
                println!("[Error] Invalid input: {}", e);
                exit(1);
            }
        };
        println!("------------------------------------------");        
        println!("Rolls:             {}", roll.get_rolls_string());
        println!("Formula:           {}", roll.get_formula_string_as_infix());
        println!("Rolls Formula:     {}", roll.get_rolls_formula_string_as_infix());
        println!("Result:            {}", roll.get_result());
        println!("------------------------------------------");
        let end = PreciseTime::now();        
        println!("Execution Time:    {}", start.to(end));
    } else {
        loop {
            let mut input = String::new();
            print!("rfyl > ");
            io::stdout().flush().expect("[Error] Flush failed!");
            match io::stdin().read_line(&mut input) {
                Ok(n) => {
                    if n > 2 {
                        let start = PreciseTime::now();
                        let roll = match roll(input) {
                            Ok(v) => v,
                            Err(e) => {
                                println!("[Error] Invalid input: {}", e);
                                continue;
                            }
                        };
                        println!("------------------------------------------");
                        println!("Rolls:             {}", roll.get_rolls_string());
                        println!("Formula:           {}", roll.get_formula_string_as_infix());
                        println!("Rolls Formula:     {}", roll.get_rolls_formula_string_as_infix());
                        println!("Result:            {}", roll.get_result());
                        println!("------------------------------------------");
                        let end = PreciseTime::now();                        
                        println!("Execution Time:    {}", start.to(end));
                    } else {
                        println!("[Error] Please enter a formula.");
                    }
                },
                Err(e) => println!("[Error] Error while reading input: {}.", e)
            }
        }
    }
}