diff --git a/src/error.rs b/src/error.rs index 26bb8963..55277c36 100644 --- a/src/error.rs +++ b/src/error.rs @@ -8,5 +8,6 @@ pub enum Error { NoLibraryTargetFound, NoMatchingBinaryTargetFound, NoTargetProvided, + NotACargoFolder, Syntax(String), } diff --git a/src/main.rs b/src/main.rs index 3f3d3a0f..832b1408 100644 --- a/src/main.rs +++ b/src/main.rs @@ -66,8 +66,14 @@ fn choose_target<'a>(args: &Arguments, manifest: &'a Manifest) -> Result<&'a Tar fn run(args: &Arguments) -> Result<(), Error> { let manifest: Manifest = { - let output = process::Command::new("cargo").arg("read-manifest").output(); - let stdout = output.map_err(Error::CargoExecutionFailed)?.stdout; + let output = process::Command::new("cargo") + .arg("read-manifest") + .output() + .map_err(Error::CargoExecutionFailed)?; + let stdout = output.stdout; + if !output.status.success() { + return Err(Error::NotACargoFolder); + } let json_string = String::from_utf8(stdout).expect("Failed reading cargo output"); Manifest::from_str(&json_string)? }; @@ -230,6 +236,10 @@ fn main() { "Error: No matching binary target found.".to_string() } Error::NoTargetProvided => "Error: Please specify a target to process.".to_string(), + Error::NotACargoFolder => { + "Error: could not find `Cargo.toml` in `/home/hiram/git` or any parent directory" + .to_string() + } Error::Syntax(error) => format!("Error: Failed to parse: {}", error), }; println!("{}", error_string.red());