aboutsummaryrefslogtreecommitdiff
path: root/mingling/src/res/exit_code.rs
diff options
context:
space:
mode:
Diffstat (limited to 'mingling/src/res/exit_code.rs')
-rw-r--r--mingling/src/res/exit_code.rs24
1 files changed, 24 insertions, 0 deletions
diff --git a/mingling/src/res/exit_code.rs b/mingling/src/res/exit_code.rs
index 388a6f1..f4d4238 100644
--- a/mingling/src/res/exit_code.rs
+++ b/mingling/src/res/exit_code.rs
@@ -1,4 +1,28 @@
+use mingling_core::{ProgramCollect, this};
+
+/// Represents a program exit code.
#[derive(Debug, Default, Clone, Copy)]
pub struct ExitCode {
+ /// The numeric exit code value.
pub exit_code: i32,
}
+
+/// Updates the globally stored exit code for the given `ProgramCollect` type.
+pub fn update_exit_code<C>(exit_code: i32)
+where
+ C: ProgramCollect<Enum = C> + 'static,
+{
+ this::<C>().modify_res(|e: &mut ExitCode| e.exit_code = exit_code);
+}
+
+/// Retrieves the globally stored exit code for the given `ProgramCollect` type.
+/// Returns `0` if no exit code has been set.
+pub fn exit_code<C>() -> i32
+where
+ C: ProgramCollect<Enum = C> + 'static,
+{
+ match this::<C>().res::<ExitCode>() {
+ Some(e) => e.exit_code,
+ None => 0,
+ }
+}