diff options
Diffstat (limited to 'mingling')
| -rw-r--r-- | mingling/src/example_docs.rs | 5 | ||||
| -rw-r--r-- | mingling/src/res/exit_code.rs | 24 |
2 files changed, 26 insertions, 3 deletions
diff --git a/mingling/src/example_docs.rs b/mingling/src/example_docs.rs index 09e84a8..1669344 100644 --- a/mingling/src/example_docs.rs +++ b/mingling/src/example_docs.rs @@ -371,9 +371,8 @@ pub mod example_dispatch_tree {} /// ```ignore /// use mingling::{ /// macros::{chain, dispatcher, gen_program, pack, r_println, renderer}, -/// res::ExitCode, +/// res::update_exit_code, /// setup::ExitCodeSetup, -/// this, /// }; /// /// fn main() { @@ -388,7 +387,7 @@ pub mod example_dispatch_tree {} /// /// #[chain] /// fn handle_error_entry(_prev: ErrorEntry) -> NextProcess { -/// this::<ThisProgram>().modify_res(|r: &mut ExitCode| r.exit_code = 1); +/// update_exit_code::<ThisProgram>(1); /// return ResultError::default(); /// } /// 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, + } +} |
