aboutsummaryrefslogtreecommitdiff
path: root/mingling_core/src/program/exec.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-08-15 03:28:02 +0800
committer魏曹先生 <1992414357@qq.com>2026-08-15 03:28:02 +0800
commitec6c87d12062576271231b88364a4aa00765ae65 (patch)
treec1fcc3583aaffa06c0857403b557231719dde1af /mingling_core/src/program/exec.rs
parent372eb14ab9a9b7fc0e5334ca15a9d8b656140e54 (diff)
feat(core): allow pre_dispatch hooks to mutate arguments
Change `HookPreDispatchInfo.arguments` from `&[String]` to `&mut Vec<String>` so hooks can rewrite command-line arguments before dispatch.
Diffstat (limited to 'mingling_core/src/program/exec.rs')
-rw-r--r--mingling_core/src/program/exec.rs9
1 files changed, 6 insertions, 3 deletions
diff --git a/mingling_core/src/program/exec.rs b/mingling_core/src/program/exec.rs
index 923b47b..b0a5b16 100644
--- a/mingling_core/src/program/exec.rs
+++ b/mingling_core/src/program/exec.rs
@@ -15,13 +15,14 @@ pub fn exec<C>(program: &'static Program<C>) -> Result<RenderResult, ProgramInte
where
C: ProgramCollect<Enum = C> + Send + Sync,
{
- might_be_async::invoke!(exec_with_args(program, &program.args))
+ let mut args = program.args.clone();
+ might_be_async::invoke!(exec_with_args(program, &mut args))
}
#[might_be_async::func]
pub fn exec_with_args<C>(
program: &'static Program<C>,
- args: &[String],
+ args: &mut Vec<String>,
) -> Result<RenderResult, ProgramInternalExecuteError>
where
C: ProgramCollect<Enum = C> + Send + Sync,
@@ -51,7 +52,9 @@ where
// Run hooks
control!(
- program.run_hook_pre_dispatch(&crate::hook::HookPreDispatchInfo { arguments: args }),
+ program.run_hook_pre_dispatch(&mut crate::hook::HookPreDispatchInfo {
+ arguments: &mut *args,
+ }),
current
);