summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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)
+}