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_core/src/program/repl_exec.rs | |
| parent | addfbbf0b33a6251605990da73c2de5131766827 (diff) | |
Redesign hook system with structured info types and ProgramControls
Diffstat (limited to 'mingling_core/src/program/repl_exec.rs')
| -rw-r--r-- | mingling_core/src/program/repl_exec.rs | 61 |
1 files changed, 41 insertions, 20 deletions
diff --git a/mingling_core/src/program/repl_exec.rs b/mingling_core/src/program/repl_exec.rs index d292be1..cbda9da 100644 --- a/mingling_core/src/program/repl_exec.rs +++ b/mingling_core/src/program/repl_exec.rs @@ -26,34 +26,42 @@ where // Inject default REPL resource self.with_resource(ResREPL::default()); - self.run_hook_repl_on_begin(); + self.run_hook_repl_on_begin(crate::hook::HookREPLBeginInfo {}); self.exec_wrapper(|p| -> () { loop { - p.run_hook_repl_pre_readline(); - let mut readline = p.run_hook_repl_readline().unwrap_or_default(); - p.run_hook_repl_post_readline(&mut readline); + p.run_hook_repl_pre_readline(crate::hook::HookREPLPreReadlineInfo {}); + let mut readline = p + .run_hook_repl_readline(crate::hook::HookREPLReadlineInfo {}) + .unwrap_or_default(); + p.run_hook_repl_post_readline(crate::hook::HookREPLPostReadlineInfo { + line: &mut readline, + }); let args = split_input_string(readline.clone()); - p.run_hook_repl_pre_exec(&args); + p.run_hook_repl_pre_exec(crate::hook::HookREPLPreExecInfo { args: &args }); match exec_once(p, args) { Ok(r) => { - p.run_hook_repl_on_receive_result(&r); + p.run_hook_repl_on_receive_result( + crate::hook::HookREPLOnReceiveResultInfo { result: &r }, + ); } Err(ProgramInternalExecuteError::REPLPanic(panic)) => { - p.run_hook_repl_on_panic(&panic); + p.run_hook_repl_on_panic(crate::hook::HookREPLOnPanicInfo { + panic: &panic, + }); } _ => {} } - p.run_hook_repl_post_exec(); + p.run_hook_repl_post_exec(crate::hook::HookREPLPostExecInfo {}); if this::<C>().res::<ResREPL>().unwrap().exit { - p.run_hook_repl_exit(); + p.run_hook_repl_exit(crate::hook::HookREPLExitInfo {}); break; } - p.run_hook_repl_loop_once(); + p.run_hook_repl_loop_once(crate::hook::HookREPLLoopOnceInfo {}); } }); } @@ -75,31 +83,42 @@ where // Inject default REPL resource self.with_resource(ResREPL::default()); - self.run_hook_repl_on_begin(); + self.run_hook_repl_on_begin(crate::hook::HookREPLBeginInfo {}); self.exec_wrapper(async |p| -> () { loop { - p.run_hook_repl_pre_readline(); - let mut readline = p.run_hook_repl_readline().unwrap_or_default(); - p.run_hook_repl_post_readline(&mut readline); + p.run_hook_repl_pre_readline(crate::hook::HookREPLPreReadlineInfo {}); + let mut readline = p + .run_hook_repl_readline(crate::hook::HookREPLReadlineInfo {}) + .unwrap_or_default(); + p.run_hook_repl_post_readline(crate::hook::HookREPLPostReadlineInfo { + line: &mut readline, + }); let args = split_input_string(readline.clone()); - p.run_hook_repl_pre_exec(&args); + p.run_hook_repl_pre_exec(crate::hook::HookREPLPreExecInfo { args: &args }); match exec_once(p, args).await { Ok(r) => { - p.run_hook_repl_on_receive_result(&r); + p.run_hook_repl_on_receive_result( + crate::hook::HookREPLOnReceiveResultInfo { result: &r }, + ); + } + Err(ProgramInternalExecuteError::REPLPanic(panic)) => { + p.run_hook_repl_on_panic(crate::hook::HookREPLOnPanicInfo { + panic: &panic, + }); } _ => {} } - p.run_hook_repl_post_exec(); + p.run_hook_repl_post_exec(crate::hook::HookREPLPostExecInfo {}); if this::<C>().res::<ResREPL>().unwrap().exit { - p.run_hook_repl_exit(); + p.run_hook_repl_exit(crate::hook::HookREPLExitInfo {}); break; } - p.run_hook_repl_loop_once(); + p.run_hook_repl_loop_once(crate::hook::HookREPLLoopOnceInfo {}); } }) .await; @@ -133,7 +152,9 @@ where .unwrap() .downcast_ref::<Program<C>>() .unwrap(); - program.run_hook_repl_on_panic(&panic_payload); + program.run_hook_repl_on_panic(crate::hook::HookREPLOnPanicInfo { + panic: &panic_payload, + }); Err(ProgramInternalExecuteError::REPLPanic(panic_payload)) } Ok(r) => r, |
