diff options
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 55 |
1 files changed, 39 insertions, 16 deletions
diff --git a/src/main.rs b/src/main.rs index 02f0227..cf2eddd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,21 +1,44 @@ #[macro_use] -extern crate quicli; -extern crate ansi_term; +extern crate clap; +extern crate indicatif; +extern crate console; -use ansi_term::Color::Yellow; -use quicli::prelude::*; +use clap::{App, SubCommand}; +use indicatif::{ProgressBar}; +use console::{style, Emoji}; +use std::process::Command; -mod helpers; -mod about_variables; - -#[derive(Debug, StructOpt)] -struct Cli { - exercise: Option<String>, +fn main() { + let matches = App::new("r2") + .version(crate_version!()) + .author("Olivia Hugger") + .about("Test") + .subcommand(SubCommand::with_name("verify").alias("v")) + .get_matches(); + + if let Some(_) = matches.subcommand_matches("verify") { + execute("exercises/ex1.rs"); + execute("exercises/ex2.rs"); + execute("exercises/ex3.rs"); + execute("exercises/ex4.rs"); + execute("exercises/ex5.rs"); + } } -main!(|args: Cli| if let Some(e) = args.exercise { - println!("selected {}", e); -} else { - println!("Welcome to {}!\n", Yellow.paint("Rustlings")); - about_variables::exec(); -}); +fn execute(filename: &str) { + let bar = ProgressBar::new_spinner(); + bar.set_message(format!("Compiling {}...", filename).as_str()); + bar.enable_steady_tick(100); + let compilecmd = Command::new("rustc") + .args(&[filename, "-o", "temp"]) + .output() + .expect("fail"); + bar.finish_and_clear(); + if compilecmd.status.success() { + println!("{} Successfully compiled {}!", Emoji("✅", "✓"), style(filename).italic()); + } else { + println!("{} Compilation of {} failed! Compiler error message:\n", Emoji("⚠️ ", "!"), style(filename).italic()); + println!("{}", String::from_utf8_lossy(&compilecmd.stderr)); + std::process::exit(1); + } +} |
