From 36a033b87a6549c1e5639c908bf7381c84f4f425 Mon Sep 17 00:00:00 2001 From: Roberto Vidal Date: Mon, 11 Nov 2019 17:15:14 +0100 Subject: [PATCH] feat(cli): check for rustc before doing anything Addresses #190. --- src/main.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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::(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) +}