From 0fa5b304ed57517ba04b7a42ff30258e456972f8 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Sun, 14 Mar 2021 03:42:16 +0100 Subject: Exit with sysexits.h error codes on error --- src/main.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src') 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 . 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::() { + 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), + } + }, } } -- cgit v1.2.3