diff options
author | Teddy Wing | 2021-03-14 03:42:16 +0100 |
---|---|---|
committer | Teddy Wing | 2021-03-14 03:43:44 +0100 |
commit | 0fa5b304ed57517ba04b7a42ff30258e456972f8 (patch) | |
tree | 60d9adde4763ba8652cc02b15468e06a94d2b954 | |
parent | dca32c260c0ecd85e01a7bbef07192bc4c8a2290 (diff) | |
download | mutt-ottolangy-0fa5b304ed57517ba04b7a42ff30258e456972f8.tar.bz2 |
Exit with sysexits.h error codes on error
-rw-r--r-- | Cargo.lock | 7 | ||||
-rw-r--r-- | Cargo.toml | 1 | ||||
-rw-r--r-- | src/main.rs | 16 |
3 files changed, 23 insertions, 1 deletions
@@ -65,6 +65,12 @@ dependencies = [ ] [[package]] +name = "exitcode" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de853764b47027c2e862a995c34978ffa63c1501f2e15f987ba11bd4f9bba193" + +[[package]] name = "hashbrown" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -90,6 +96,7 @@ name = "ottolangy" version = "0.0.1" dependencies = [ "anyhow", + "exitcode", "mailparse", "thiserror", "whatlang", @@ -5,6 +5,7 @@ edition = "2018" [dependencies] anyhow = "1.0.38" +exitcode = "1.1.2" mailparse = "0.13.2" thiserror = "1.0.24" whatlang = "0.11.1" diff --git a/src/main.rs b/src/main.rs index 2775155..a50b42d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,6 +14,7 @@ // along with this program. If not, see <https://www.gnu.org/licenses/>. use anyhow::{anyhow, Context, Error}; +use exitcode; use mailparse; use thiserror; use whatlang::{self, Lang}; @@ -21,6 +22,7 @@ use xdg; use std::fs::File; use std::io::{self, Read, Write}; +use std::process; const PROGRAM_NAME: &'static str = "ottolangy"; @@ -59,7 +61,19 @@ enum OttolangyError { fn main() { match run() { Ok(_) => (), - Err(e) => eprintln!("{}: error: {}", PROGRAM_NAME, e), + Err(e) => { + eprintln!("{}: error: {}", PROGRAM_NAME, e); + + match e.downcast_ref::<OttolangyError>() { + Some(OttolangyError::ParseMail(_)) => + process::exit(exitcode::DATAERR), + Some(OttolangyError::ParseMailUnknown) => + process::exit(exitcode::DATAERR), + Some(OttolangyError::Xdg(_)) => process::exit(exitcode::IOERR), + Some(OttolangyError::Io(_)) => process::exit(exitcode::IOERR), + None => process::exit(exitcode::UNAVAILABLE), + } + }, } } |