diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-06-24 12:01:38 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-06-24 12:01:38 +0800 |
| commit | 1d1baf75a3acb5eb32913a8bdad42bae42844aa2 (patch) | |
| tree | 5dafbcbce48a5de3c61bba0c7d309e97dd80b1ce /mingling/src | |
| parent | addfbbf0b33a6251605990da73c2de5131766827 (diff) | |
Redesign hook system with structured info types and ProgramControls
Diffstat (limited to 'mingling/src')
| -rw-r--r-- | mingling/src/example_docs.rs | 32 | ||||
| -rw-r--r-- | mingling/src/setups/exit_code.rs | 11 | ||||
| -rw-r--r-- | mingling/src/setups/repl_basic.rs | 11 |
3 files changed, 33 insertions, 21 deletions
diff --git a/mingling/src/example_docs.rs b/mingling/src/example_docs.rs index 3171c22..ea8e539 100644 --- a/mingling/src/example_docs.rs +++ b/mingling/src/example_docs.rs @@ -175,7 +175,7 @@ pub mod example_argument_parse {} /// program.with_dispatcher(CMDDownload); /// /// // Add a hook to display when the download begins -/// program.with_hook(ProgramHook::empty().on_begin(|| println!("Download begin"))); +/// program.with_hook(ProgramHook::empty().on_begin::<_, ()>(|_| println!("Download begin"))); /// /// // --------- IMPORTANT --------- /// // The return values of `exec_*()` related functions have been replaced with Futures @@ -1359,7 +1359,10 @@ pub mod example_help {} /// /// Source code (./src/main.rs) /// ```ignore -/// use mingling::{hook::ProgramHook, prelude::*}; +/// use mingling::{ +/// hook::{ProgramControlUnit, ProgramHook}, +/// prelude::*, +/// }; /// /// dispatcher!("greet", CMDGreet => EntryGreet); /// @@ -1369,18 +1372,18 @@ pub mod example_help {} /// // --------- IMPORTANT --------- /// program.with_hook( /// ProgramHook::<ThisProgram>::empty() -/// .on_begin(|| println!("[DEBUG] Program is begin")) -/// .on_pre_dispatch(|args| println!("[DEBUG] Pre dispatch: {args:?}")) -/// .on_post_dispatch(|c: &_| println!("[DEBUG] Post dispatch: {c:?}")) -/// .on_pre_chain(|c: &_, _| { -/// println!("[DEBUG] Pre chain: {c}"); +/// .on_begin::<_, ()>(|_| println!("[DEBUG] Program is begin")) +/// .on_pre_dispatch(|info| println!("[DEBUG] Pre dispatch: {}", info.arguments.join(" "))) +/// .on_post_dispatch(|info| println!("[DEBUG] Post dispatch: {}", info.entry)) +/// .on_pre_chain(|info| { +/// println!("[DEBUG] Pre chain: {}", info.input); /// }) -/// .on_post_chain(|any_output| println!("[DEBUG] Post chain: {}", any_output.member_id)) -/// .on_finish(|| { +/// .on_post_chain(|info| println!("[DEBUG] Post chain: {}", info.output.member_id)) +/// .on_finish(|_| { /// println!("[DEBUG] Loop end"); -/// 0 // Override exit code +/// ProgramControlUnit::OverrideExitCode(0) // Override exit code /// }) -/// .on_pre_render(|c: &_, _| println!("[DEBUG] Pre render: {c}")) +/// .on_pre_render(|info| println!("[DEBUG] Pre render: {}", info.input)) /// .on_post_render(|_| println!("[DEBUG] Post render")), /// ); /// // --------- IMPORTANT --------- @@ -1854,7 +1857,10 @@ pub mod example_pack_err {} /// program.stdout_setting.silence_panic = true; /// /// // Define a hook to output &ProgramPanic when a Panic occurs -/// program.with_hook(ProgramHook::empty().on_exec_panic(|info| println!("Program panic: {info}"))); +/// program.with_hook( +/// ProgramHook::empty() +/// .on_exec_panic::<_, ()>(|info| println!("Program panic: {}", info.panic)), +/// ); /// // --------- IMPORTANT --------- /// /// let _ = program.exec(); @@ -1967,7 +1973,7 @@ pub mod example_panic_unwind {} /// })); /// /// // Add hooks to handle REPL-related events -/// program.with_hook(ProgramHook::empty().on_repl_begin(|| { +/// program.with_hook(ProgramHook::empty().on_repl_begin(|_| { /// // Print welcome message /// println!("Welcome!"); /// })); diff --git a/mingling/src/setups/exit_code.rs b/mingling/src/setups/exit_code.rs index ed8204c..025ed8a 100644 --- a/mingling/src/setups/exit_code.rs +++ b/mingling/src/setups/exit_code.rs @@ -1,6 +1,11 @@ use std::marker::PhantomData; -use mingling_core::{ProgramCollect, hook::ProgramHook, setup::ProgramSetup, this}; +use mingling_core::{ + ProgramCollect, + hook::{ProgramControlUnit, ProgramHook}, + setup::ProgramSetup, + this, +}; use crate::res::ResExitCode; @@ -32,9 +37,9 @@ where program.with_resource(ResExitCode { exit_code: 0 }); // Insert hook to override exit code before program ends - program.with_hook(ProgramHook::empty().on_finish(|| { + program.with_hook(ProgramHook::empty().on_finish(|_| { let this = this::<C>().res_or_default::<ResExitCode>(); - this.exit_code + ProgramControlUnit::OverrideExitCode(this.exit_code) })); } } diff --git a/mingling/src/setups/repl_basic.rs b/mingling/src/setups/repl_basic.rs index 8b9b83f..71a38d2 100644 --- a/mingling/src/setups/repl_basic.rs +++ b/mingling/src/setups/repl_basic.rs @@ -9,7 +9,7 @@ where C: ProgramCollect<Enum = C>, { fn setup(self, program: &mut Program<C>) { - program.with_hook(ProgramHook::empty().on_repl_readline(|| readline().ok())); + program.with_hook(ProgramHook::empty().on_repl_readline(|_| readline().ok())); } } @@ -48,7 +48,7 @@ where print!("{}", PROMPT.get().unwrap()); let _ = std::io::stdout().flush(); } - program.with_hook(ProgramHook::empty().on_repl_pre_readline(print_prompt)); + program.with_hook(ProgramHook::empty().on_repl_pre_readline(|_| print_prompt())); } BasicREPLPromptSetup::Func(f) => { static FUNC: std::sync::OnceLock<fn() -> String> = std::sync::OnceLock::new(); @@ -57,7 +57,8 @@ where print!("{}", FUNC.get().unwrap()()); let _ = std::io::stdout().flush(); } - program.with_hook(ProgramHook::empty().on_repl_pre_readline(print_func_prompt)); + program + .with_hook(ProgramHook::empty().on_repl_pre_readline(|_| print_func_prompt())); } } } @@ -71,8 +72,8 @@ where { fn setup(self, program: &mut Program<C>) { program.with_hook(ProgramHook::empty().on_repl_receive_result(|r| { - if !r.is_empty() { - println!("{}", r.trim()) + if !r.result.is_empty() { + println!("{}", r.result.trim()) } })); } |
