From 57c53affe3542cb6bd4e79ee4c18f20a1bd76b2d Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Mon, 17 Aug 2026 05:49:19 +0800 Subject: refactor!: replace pack! macros with derive-based pipeline types Remove the `pack!`, `pack_err!`, `pack_structural!`, and `pack_err_structural!` macros, replacing all pipeline type definitions with `#[derive(Grouped)]` and `#[derive(Grouped, Wrap)]` attributes. This changes the generated struct shape from named-field structs with an `inner` field to tuple structs accessed via `.0`, and removes the auto-generated `name` and `info` fields from error types. --- docs/_zh_CN/pages/11-resource-system.md | 11 ++-- docs/_zh_CN/pages/12-exit-code.md | 7 +-- docs/_zh_CN/pages/13-hook.md | 5 +- docs/_zh_CN/pages/14-testing.md | 39 +++++++------ docs/_zh_CN/pages/2-define-a-dispatcher.md | 10 ++-- docs/_zh_CN/pages/3-define-a-chain.md | 54 +++++++++++------- docs/_zh_CN/pages/4-render-result.md | 35 ++++++------ docs/_zh_CN/pages/5-multiple-commands.md | 20 ++++--- docs/_zh_CN/pages/6-argument-parse-picker.md | 64 +++++++++++++--------- docs/_zh_CN/pages/9-error-handling.md | 40 ++++++++------ .../_zh_CN/pages/advanced/2-structural-renderer.md | 20 ++++--- docs/_zh_CN/pages/concepts/2-resource.md | 3 +- docs/_zh_CN/pages/concepts/3-any-output.md | 6 +- docs/_zh_CN/pages/concepts/4-program-collect.md | 2 +- docs/_zh_CN/pages/other/features.md | 59 ++++++++++---------- docs/_zh_CN/pages/other/naming_rule.md | 25 +++++---- 16 files changed, 228 insertions(+), 172 deletions(-) (limited to 'docs/_zh_CN') diff --git a/docs/_zh_CN/pages/11-resource-system.md b/docs/_zh_CN/pages/11-resource-system.md index 40d8cd9..b0fbe31 100644 --- a/docs/_zh_CN/pages/11-resource-system.md +++ b/docs/_zh_CN/pages/11-resource-system.md @@ -31,11 +31,12 @@ fn main() { @@@#[derive(Default, Clone)] @@@struct ResCurrentDir(String); @@@dispatcher!("pwd", EntryPrintWorkingDir); -@@@pack!(ResultPath = String); +@@@#[derive(Grouped, Wrap)] +@@@pub struct ResultPath(String); // 通过 &T 注入只读资源 #[chain] fn handle_pwd(_args: EntryPrintWorkingDir, cwd: &ResCurrentDir) -> Next { - ResultPath::new(cwd.0.clone()).to_render() + ResultPath(cwd.0.clone()).to_render() } #[renderer(buffer)] @@ -53,7 +54,8 @@ fn render_path(result: ResultPath) { @@@#[derive(Default, Clone)] @@@struct ResVisitCount(u32); @@@dispatcher!("visit", EntryVisit); -@@@pack!(ResultDone = ()); +@@@#[derive(Grouped, Wrap, Default)] +@@@pub struct ResultDone(()); #[chain] fn handle_visit(_args: EntryVisit, counter: &mut ResVisitCount) -> Next { counter.0 += 1; @@ -74,7 +76,8 @@ Chain 可以同时注入任意多个资源,框架按类型自动匹配: @@@#[derive(Default, Clone)] struct ResConfig(String); @@@#[derive(Default, Clone)] struct ResCounter(u32); @@@dispatcher!("test", EntryTest); -@@@pack!(ResultDone = ()); +@@@#[derive(Grouped, Wrap, Default)] +@@@pub struct ResultDone(()); // 同时注入只读 + 可修改 #[chain] fn handle_test(_args: EntryTest, config: &ResConfig, counter: &mut ResCounter) -> Next { diff --git a/docs/_zh_CN/pages/12-exit-code.md b/docs/_zh_CN/pages/12-exit-code.md index 7c55b60..9270b84 100644 --- a/docs/_zh_CN/pages/12-exit-code.md +++ b/docs/_zh_CN/pages/12-exit-code.md @@ -3,9 +3,7 @@ 如何使用资源系统管理程序退出码
-程序退出时给 shell 一个正确的退出码是 CLI 的基本素养 - -。Mingling 提供了开箱即用的 `ExitCodeSetup`,配合 `ResExitCode` 资源,让退出码控制变得极其简单。 +程序退出时给 shell 一个正确的退出码是 CLI 的基本素养。Mingling 提供了开箱即用的 `ExitCodeSetup`,配合 `ResExitCode` 资源,让退出码控制变得极其简单。 ## 启用 ExitCodeSetup @@ -31,7 +29,8 @@ fn main() { ```rust @@@use mingling::res::ResExitCode; @@@use mingling::setup::ExitCodeSetup; -@@@pack!(EntryCheck = Vec
Written by @Weicao-CatilGrass
diff --git a/docs/_zh_CN/pages/concepts/4-program-collect.md b/docs/_zh_CN/pages/concepts/4-program-collect.md
index a0236f6..616f645 100644
--- a/docs/_zh_CN/pages/concepts/4-program-collect.md
+++ b/docs/_zh_CN/pages/concepts/4-program-collect.md
@@ -9,7 +9,7 @@
### 1. 生成枚举
-扫描当前模块中所有 `pack!`、`#[chain]`、`#[renderer]` 等宏标记的类型,为每个类型生成一个枚举变体。
+扫描当前模块中所有 `#[derive(Grouped)]`、`#[chain]`、`#[renderer]` 等宏标记的类型,为每个类型生成一个枚举变体。
这个枚举就是 `AnyOutput Details
@@ -168,10 +168,13 @@ build_comp_scripts("myprogram").unwrap();
```rust
// Features: ["extras"]
-pack!(StatePrev1 = ());
-pack!(StatePrev2 = ());
+#[derive(Grouped, Wrap)]
+pub struct StatePrev1(());
+#[derive(Grouped, Wrap)]
+pub struct StatePrev2(());
-pack!(StateNext = ());
+#[derive(Grouped, Wrap)]
+pub struct StateNext(());
#[chain]
fn handle_state_prev2(_p: StatePrev2) {
@@ -186,7 +189,7 @@ fn handle_state_prev1(_p: StatePrev1) -> Next {
// 当需要 Next 且不需要返回值,便可以使用它
empty_result!()
} else {
- StateNext::new(()).into()
+ StateNext(()).into()
}
}
```
@@ -217,7 +220,8 @@ fn no_error_setup(program: &mut Program