From 1d1baf75a3acb5eb32913a8bdad42bae42844aa2 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Wed, 24 Jun 2026 12:01:38 +0800 Subject: Redesign hook system with structured info types and ProgramControls --- examples/example-async-support/src/main.rs | 2 +- examples/example-hook/src/main.rs | 23 +++++++++++++---------- examples/example-panic-unwind/src/main.rs | 5 ++++- examples/example-repl-basic/src/main.rs | 2 +- 4 files changed, 19 insertions(+), 13 deletions(-) (limited to 'examples') diff --git a/examples/example-async-support/src/main.rs b/examples/example-async-support/src/main.rs index 5ded5e5..920b3dd 100644 --- a/examples/example-async-support/src/main.rs +++ b/examples/example-async-support/src/main.rs @@ -33,7 +33,7 @@ async fn main() { 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 diff --git a/examples/example-hook/src/main.rs b/examples/example-hook/src/main.rs index d6a2dd0..d9a8fd1 100644 --- a/examples/example-hook/src/main.rs +++ b/examples/example-hook/src/main.rs @@ -20,7 +20,10 @@ //! Hello, Alice! //! ``` -use mingling::{hook::ProgramHook, prelude::*}; +use mingling::{ + hook::{ProgramControlUnit, ProgramHook}, + prelude::*, +}; dispatcher!("greet", CMDGreet => EntryGreet); @@ -30,18 +33,18 @@ fn main() { // --------- IMPORTANT --------- program.with_hook( ProgramHook::::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 --------- diff --git a/examples/example-panic-unwind/src/main.rs b/examples/example-panic-unwind/src/main.rs index bb25541..ed032c5 100644 --- a/examples/example-panic-unwind/src/main.rs +++ b/examples/example-panic-unwind/src/main.rs @@ -29,7 +29,10 @@ fn main() { 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(); diff --git a/examples/example-repl-basic/src/main.rs b/examples/example-repl-basic/src/main.rs index abea141..8df8c22 100644 --- a/examples/example-repl-basic/src/main.rs +++ b/examples/example-repl-basic/src/main.rs @@ -65,7 +65,7 @@ fn main() { })); // 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!"); })); -- cgit