summaryrefslogtreecommitdiffstats
path: root/src/module/exit_status.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/module/exit_status.rs')
-rw-r--r--src/module/exit_status.rs45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/module/exit_status.rs b/src/module/exit_status.rs
new file mode 100644
index 0000000..00a1107
--- /dev/null
+++ b/src/module/exit_status.rs
@@ -0,0 +1,45 @@
+#[derive(Clone, Copy, Debug, PartialEq, Eq)]
+pub enum ExitStatus {
+ None,
+ Abort,
+ ConfigError,
+ FileReadError,
+ FileWriteError,
+ Good,
+ StateError,
+ Kill,
+}
+
+impl ExitStatus {
+ pub const fn to_code(self) -> i32 {
+ match self {
+ Self::Abort => 5,
+ Self::ConfigError => 1,
+ Self::FileReadError => 2,
+ Self::FileWriteError => 3,
+ Self::None | Self::Good => 0,
+ Self::StateError => 4,
+ Self::Kill => 6,
+ }
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use rstest::rstest;
+
+ use super::*;
+
+ #[rstest]
+ #[case::abort(ExitStatus::None, 0)]
+ #[case::abort(ExitStatus::Abort, 5)]
+ #[case::config_error(ExitStatus::ConfigError, 1)]
+ #[case::file_read_error(ExitStatus::FileReadError, 2)]
+ #[case::file_write_error(ExitStatus::FileWriteError, 3)]
+ #[case::good(ExitStatus::Good, 0)]
+ #[case::state_error(ExitStatus::StateError, 4)]
+ #[case::kill(ExitStatus::Kill, 6)]
+ fn to_code(#[case] input: ExitStatus, #[case] expected: i32) {
+ assert_eq!(ExitStatus::to_code(input), expected);
+ }
+}