summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoberto Vidal <vidal.roberto.j@gmail.com>2019-11-11 17:15:14 +0100
committerRoberto Vidal <vidal.roberto.j@gmail.com>2019-11-11 18:00:54 +0100
commit36a033b87a6549c1e5639c908bf7381c84f4f425 (patch)
tree5745c62a7ac55f3b676eff281de2710246b63bd0 /src
parent9544ba10294d4959b0a761c04d86ef8ceeba3838 (diff)
feat(cli): check for rustc before doing anything
Addresses #190.
Diffstat (limited to 'src')
-rw-r--r--src/main.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs
index d1d0d6d..9505650 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -7,6 +7,7 @@ use notify::{RecommendedWatcher, RecursiveMode, Watcher};
use std::ffi::OsStr;
use std::fs;
use std::path::Path;
+use std::process::{Command, Stdio};
use std::sync::mpsc::channel;
use std::time::Duration;
@@ -56,6 +57,13 @@ fn main() {
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 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)
+}