aboutsummaryrefslogtreecommitdiff
path: root/mingling_core/src/program/hook/hook_info.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-06-24 12:01:38 +0800
committer魏曹先生 <1992414357@qq.com>2026-06-24 12:01:38 +0800
commit1d1baf75a3acb5eb32913a8bdad42bae42844aa2 (patch)
tree5dafbcbce48a5de3c61bba0c7d309e97dd80b1ce /mingling_core/src/program/hook/hook_info.rs
parentaddfbbf0b33a6251605990da73c2de5131766827 (diff)
Redesign hook system with structured info types and ProgramControls
Diffstat (limited to 'mingling_core/src/program/hook/hook_info.rs')
-rw-r--r--mingling_core/src/program/hook/hook_info.rs119
1 files changed, 119 insertions, 0 deletions
diff --git a/mingling_core/src/program/hook/hook_info.rs b/mingling_core/src/program/hook/hook_info.rs
index e69de29..060e368 100644
--- a/mingling_core/src/program/hook/hook_info.rs
+++ b/mingling_core/src/program/hook/hook_info.rs
@@ -0,0 +1,119 @@
+use crate::{AnyOutput, ProgramCollect, RenderResult};
+
+/// Represents the data passed to `begin` hook.
+pub struct HookBeginInfo {}
+
+/// Represents the data passed to `pre_dispatch` hook.
+pub struct HookPreDispatchInfo<'a> {
+ /// Arguments entered by the user before dispatching
+ pub arguments: &'a [String],
+}
+
+/// Represents the data passed to `post_dispatch` hook.
+pub struct HookPostDispatchInfo<'a, C>
+where
+ C: ProgramCollect<Enum = C>,
+{
+ /// The entry point of dispatching
+ pub entry: &'a C,
+}
+
+/// Represents the data passed to `pre_chain` hook.
+pub struct HookPreChainInfo<'a, C>
+where
+ C: ProgramCollect<Enum = C>,
+{
+ /// Input to the chain
+ pub input: &'a C,
+
+ /// Raw data
+ pub raw: &'a dyn std::any::Any,
+}
+
+/// Represents the data passed to `post_chain` hook.
+pub struct HookPostChainInfo<'a, C>
+where
+ C: ProgramCollect<Enum = C>,
+{
+ /// Output of the chain
+ pub output: &'a AnyOutput<C>,
+}
+
+/// Represents the data passed to `pre_render` hook.
+pub struct HookPreRenderInfo<'a, C>
+where
+ C: ProgramCollect<Enum = C>,
+{
+ /// Render input
+ pub input: &'a C,
+
+ /// The raw data to be rendered
+ pub raw: &'a dyn std::any::Any,
+}
+
+/// Represents the data passed to `post_render` hook.
+pub struct HookPostRenderInfo<'a> {
+ /// The rendering result
+ pub result: &'a RenderResult,
+}
+
+/// Represents the data passed to `finish` hook.
+pub struct HookFinishInfo {}
+
+/// Represents the data passed to `exec_panic` hook.
+#[cfg(not(feature = "async"))]
+pub struct HookPanicInfo<'a> {
+ /// Raw data of the panic
+ pub panic: &'a crate::error::ProgramPanic,
+}
+
+#[cfg(feature = "repl")]
+mod repl_hook {
+ use crate::RenderResult;
+
+ /// Represents the data passed to `repl_on_begin` hook.
+ pub struct HookREPLBeginInfo {}
+
+ /// Represents the data passed to `repl_pre_readline` hook.
+ pub struct HookREPLPreReadlineInfo {}
+
+ /// Represents the data passed to `repl_readline` hook.
+ pub struct HookREPLReadlineInfo {}
+
+ /// Represents the data passed to `repl_post_readline` hook.
+ pub struct HookREPLPostReadlineInfo<'a> {
+ /// The read line (mutable for editing)
+ pub line: &'a mut String,
+ }
+
+ /// Represents the data passed to `repl_pre_exec` hook.
+ pub struct HookREPLPreExecInfo<'a> {
+ /// Arguments for the command
+ pub args: &'a [String],
+ }
+
+ /// Represents the data passed to `repl_post_exec` hook.
+ pub struct HookREPLPostExecInfo {}
+
+ /// Represents the data passed to `repl_on_receive_result` hook.
+ pub struct HookREPLOnReceiveResultInfo<'a> {
+ /// The rendering result
+ pub result: &'a RenderResult,
+ }
+
+ /// Represents the data passed to `repl_exit` hook.
+ pub struct HookREPLExitInfo {}
+
+ /// Represents the data passed to `repl_loop_once` hook.
+ pub struct HookREPLLoopOnceInfo {}
+
+ /// Represents the data passed to `repl_on_panic` hook.
+ #[cfg(not(feature = "async"))]
+ pub struct HookREPLOnPanicInfo<'a> {
+ /// Raw data of the panic
+ pub panic: &'a crate::error::ProgramPanic,
+ }
+}
+
+#[cfg(feature = "repl")]
+pub use repl_hook::*;