mob 0.4.3

A CLI for mobbing from the comfort of your console
Documentation
use clap::ArgMatches;
use client::Client;
use regex::Regex;
use std::io::{self, Write};
use std::process::exit;
use super::Result;
use termion::color;

pub fn run<C: Client>(matches: &ArgMatches, client: &C) -> Result<()> {
    let next_driver = matches.value_of("next_driver").expect("Next Driver");

    let previous_driver_id = matches
        .value_of("previous_driver_id")
        .expect("Previous Driver ID")
        .parse::<i32>()?;

    let next_driver_id = matches
        .value_of("next_driver_id")
        .expect("Next Driver ID")
        .parse::<i32>()?;

    let team_id = matches
        .value_of("team_id")
        .expect("Team ID")
        .parse::<i32>()?;

    print_next_driver(&next_driver);
    print_continue()?;

    let mut input = String::new();
    io::stdin().read_line(&mut input)?;

    if Regex::new("y")?.is_match(&input) {
        update_driver(client, previous_driver_id, next_driver_id)?;
    } else {
        client.delete_team(team_id)?;
    }

    exit(0);
}

fn print_next_driver(next_driver: &str) {
    println!("Next Driver is: {red}{next_driver}{reset}",
             red = color::Fg(color::Red),
             next_driver = next_driver,
             reset = color::Fg(color::Reset));
}

fn print_continue() -> Result<()> {
    print!("Continue [y/n]? ");
    io::stdout().flush()?;
    Ok(())
}

fn update_driver<C: Client>(client: &C, previous_driver_id: i32, next_driver_id: i32) -> Result<()> {
    client.update_member(previous_driver_id, false)?;
    client.update_member(next_driver_id, true)?;
    Ok(())
}