aboutsummaryrefslogtreecommitdiff
path: root/src/main_result.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main_result.rs')
-rw-r--r--src/main_result.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/main_result.rs b/src/main_result.rs
new file mode 100644
index 0000000..36e3096
--- /dev/null
+++ b/src/main_result.rs
@@ -0,0 +1,32 @@
+use std::{
+ io::{self, Write},
+ process::{ExitCode, Termination},
+};
+
+use super::error::Error;
+
+pub enum MainResult {
+ Success,
+ Failure(Error),
+}
+
+impl Termination for MainResult {
+ fn report(self) -> ExitCode {
+ match self {
+ Self::Success => ExitCode::SUCCESS,
+ Self::Failure(e) => {
+ let _ = write!(io::stderr(), "{e}");
+ ExitCode::FAILURE
+ }
+ }
+ }
+}
+
+impl From<Result<(), Error>> for MainResult {
+ fn from(r: Result<(), Error>) -> Self {
+ match r {
+ Ok(()) => Self::Success,
+ Err(e) => Self::Failure(e),
+ }
+ }
+}