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