aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs16
1 files changed, 15 insertions, 1 deletions
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),
+ }
+ },
}
}