aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2021-03-14 03:42:16 +0100
committerTeddy Wing2021-03-14 03:43:44 +0100
commit0fa5b304ed57517ba04b7a42ff30258e456972f8 (patch)
tree60d9adde4763ba8652cc02b15468e06a94d2b954
parentdca32c260c0ecd85e01a7bbef07192bc4c8a2290 (diff)
downloadmutt-ottolangy-0fa5b304ed57517ba04b7a42ff30258e456972f8.tar.bz2
Exit with sysexits.h error codes on error
-rw-r--r--Cargo.lock7
-rw-r--r--Cargo.toml1
-rw-r--r--src/main.rs16
3 files changed, 23 insertions, 1 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 047960a..f5844c4 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -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",
diff --git a/Cargo.toml b/Cargo.toml
index 97e4592..439c05f 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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),
+ }
+ },
}
}