feat(cli): check for rustc before doing anything

Addresses #190.
This commit is contained in:
Roberto Vidal 2019-11-11 17:15:14 +01:00
parent 9544ba1029
commit 36a033b87a

View File

@ -7,6 +7,7 @@ use notify::{RecommendedWatcher, RecursiveMode, Watcher};
use std::ffi::OsStr; use std::ffi::OsStr;
use std::fs; use std::fs;
use std::path::Path; use std::path::Path;
use std::process::{Command, Stdio};
use std::sync::mpsc::channel; use std::sync::mpsc::channel;
use std::time::Duration; use std::time::Duration;
@ -56,6 +57,13 @@ fn main() {
std::process::exit(1); std::process::exit(1);
} }
if !rustc_exists() {
println!("We cannot find `rustc`.");
println!("Try running `rustc --version` to diagnose your problem.");
println!("For instructions on how to install Rust, check the README.");
std::process::exit(1);
}
let toml_str = &fs::read_to_string("info.toml").unwrap(); let toml_str = &fs::read_to_string("info.toml").unwrap();
let exercises = toml::from_str::<ExerciseList>(toml_str).unwrap().exercises; let exercises = toml::from_str::<ExerciseList>(toml_str).unwrap().exercises;
@ -134,3 +142,13 @@ fn watch(exercises: &[Exercise]) -> notify::Result<()> {
} }
} }
} }
fn rustc_exists() -> bool {
Command::new("rustc")
.args(&["--version"])
.stdout(Stdio::null())
.spawn()
.and_then(|mut child| child.wait())
.map(|status| status.success())
.unwrap_or(false)
}