Skip to content

Commit bf1b60d

Browse files
committed
Don't panic if outside a Cargo project
Closes #200
1 parent e11b7d1 commit bf1b60d

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

src/bin/cargo-src.rs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,14 @@ fn main() {
3333
return;
3434
}
3535

36-
let workspace_root = workspace_root();
36+
let workspace_root = match workspace_root() {
37+
Ok(root) => root,
38+
Err(_) => {
39+
println!("Error: could not find workspace root");
40+
println!("`cargo src` run outside a Cargo project");
41+
std::process::exit(1);
42+
}
43+
};
3744

3845
let build_args = BuildArgs {
3946
program: env::var("CARGO").expect("Missing $CARGO var"),
@@ -55,11 +62,11 @@ fn print_help() {
5562
println!("\nOther options follow `cargo check`, see `cargo check --help` for more.");
5663
}
5764

58-
fn workspace_root() -> String {
65+
fn workspace_root() -> Result<String, serde_json::Error> {
5966
let output = Command::new("cargo").args(&["metadata", "--format-version", "1"]).output();
6067
let stdout = String::from_utf8(output.expect("error executing `cargo metadata`").stdout).expect("unexpected output");
61-
let json: Metadata = serde_json::from_str(&stdout).expect("error parsing json from `cargo metadata`");
62-
json.workspace_root
68+
let json: Metadata = serde_json::from_str(&stdout)?;
69+
Ok(json.workspace_root)
6370
}
6471

6572
#[derive(Deserialize)]

0 commit comments

Comments
 (0)