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 /README.md | |
| parent | addfbbf0b33a6251605990da73c2de5131766827 (diff) | |
Redesign hook system with structured info types and ProgramControls
Diffstat (limited to 'README.md')
| -rw-r--r-- | README.md | 34 |
1 files changed, 20 insertions, 14 deletions
@@ -624,28 +624,34 @@ fn handle_exit(_prev: EntryExit, repl: &mut ResREPL) { Mingling provides a `ProgramHook` system for observing every stage of the execution pipeline. Useful for debugging, logging, or telemetry. ```rust -use mingling::prelude::*; -use mingling::hook::ProgramHook; +use mingling::{ + hook::{ProgramControlUnit, ProgramHook}, + prelude::*, +}; dispatcher!("greet", CMDGreet => EntryGreet); fn main() { let mut program = ThisProgram::new(); - program.with_dispatcher(CMDGreet); + program.with_hook( ProgramHook::<ThisProgram>::empty() - .on_begin(|| println!("[DEBUG] Program started")) - .on_pre_dispatch(|args| println!("[DEBUG] Dispatching: {args:?}")) - .on_post_dispatch(|entry| println!("[DEBUG] Dispatched: {entry:?}")) - .on_pre_chain(|entry, _| println!("[DEBUG] Pre chain: {entry}")) - .on_post_chain(|output| println!("[DEBUG] Post chain: {}", output.member_id)) - .on_pre_render(|ty, _| println!("[DEBUG] Pre render: {ty}")) - .on_post_render(|_| println!("[DEBUG] Post render")) - .on_finish(|| { - println!("[DEBUG] Program end"); - 0 // override exit code - }), + .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(|info| println!("[DEBUG] Post chain: {}", info.output.member_id)) + .on_finish(|_| { + println!("[DEBUG] Loop end"); + ProgramControlUnit::OverrideExitCode(0) // Override exit code + }) + .on_pre_render(|info| println!("[DEBUG] Pre render: {}", info.input)) + .on_post_render(|_| println!("[DEBUG] Post render")), ); + + program.with_dispatcher(CMDGreet); program.exec_and_exit(); } ``` |
