diff --git a/src/main.rs b/src/main.rs index f800ad1..66ca5ff 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,28 +1,30 @@ -extern crate open; - -use std::{ - env, - io::{stderr, Write}, - process, -}; +use std::{env, process}; fn main() { let path_or_url = match env::args().nth(1) { Some(arg) => arg, None => { - writeln!(stderr(), "usage: open ").ok(); + eprintln!("usage: open "); process::exit(1); } }; - if let Err(err) = open::that(&path_or_url) { - writeln!( - stderr(), - "An error occourred when opening '{}': {}", - path_or_url, - err - ) - .ok(); - process::exit(3); + match open::that(&path_or_url) { + Ok(status) if status.success() => (), + Ok(status) => match status.code() { + Some(code) => { + print_error_and_exit(code, &path_or_url, &format!("error code: {}", code)) + } + None => print_error_and_exit(3, &path_or_url, "error unknown"), + }, + Err(err) => print_error_and_exit(3, &path_or_url, &err.to_string()), } } + +fn print_error_and_exit(code: i32, path: &str, error_message: &str) -> ! { + eprintln!( + "An error occurred when opening '{}': {}", + path, error_message + ); + process::exit(code); +}