aboutsummaryrefslogtreecommitdiff
path: root/docs/_zh_CN/pages/7-argument-parse-clap.md
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-06-30 18:05:05 +0800
committer魏曹先生 <1992414357@qq.com>2026-06-30 18:05:05 +0800
commit13408e79b940e9a33ca593ed30d1b20c54e01234 (patch)
tree282549991a3f31791401ca2f3255b9318679d2e9 /docs/_zh_CN/pages/7-argument-parse-clap.md
parent29867ab5c0b40378a33318d989c809f90fc7d3aa (diff)
feat(docs): add Chinese and English documentation for Mingling tutorials
Add comprehensive documentation covering Declare a Dispatcher, Declare a Chain, Rendering Results, Multi-Command Program, Argument Parsing with Picker and Clap, Program Setup, Error Handling, Help Info, Resource System, Exit Code Control, Hook System, Testing, Completion, Structural Rendering, and Core Concepts
Diffstat (limited to 'docs/_zh_CN/pages/7-argument-parse-clap.md')
-rw-r--r--docs/_zh_CN/pages/7-argument-parse-clap.md87
1 files changed, 87 insertions, 0 deletions
diff --git a/docs/_zh_CN/pages/7-argument-parse-clap.md b/docs/_zh_CN/pages/7-argument-parse-clap.md
new file mode 100644
index 0000000..e15bebb
--- /dev/null
+++ b/docs/_zh_CN/pages/7-argument-parse-clap.md
@@ -0,0 +1,87 @@
+<h1 align="center">使用 Clap 完成参数解析</h1>
+<p align="center">
+ 用 clap 做更复杂的参数解析
+</p>
+
+Picker 适合轻量级的参数提取,但当参数数量多、有复杂的校验规则、或者需要自动生成 `--help` 时,可以接入 [clap](https://crates.io/crates/clap)。
+
+## 开启 clap 特性
+
+```toml
+[dependencies.mingling]
+features = ["clap"]
+
+[dependencies.clap]
+version = "4"
+features = ["derive", "color"]
+```
+
+## dispatcher_clap
+
+`#[dispatcher_clap]` 加在 `clap::Parser` 结构体上,自动生成 Dispatcher:
+
+```rust
+// Features: ["clap"]
+// Dependencies:
+// clap = "4"
+@@@ use mingling::macros::dispatcher_clap;
+#[derive(Default, clap::Parser, Groupped)]
+#[dispatcher_clap("greet", CMDGreet, help = true, error = ErrorGreetParsed)]
+pub struct EntryGreet {
+ #[clap(default_value = "World")]
+ name: String,
+ #[arg(short, long, default_value_t = 1)]
+ repeat: i32,
+}
+
+#[renderer]
+fn render_greet(greet: EntryGreet) {
+ let count = greet.repeat.max(0) as usize;
+ r_print!("Hello, ");
+ for _ in 0..count {
+ r_print!("{} ", greet.name);
+ }
+ r_println!("!");
+}
+
+#[renderer]
+fn render_greet_parse_failed(err: ErrorGreetParsed) {
+ r_println!("{}", *err);
+}
+```
+
+## 与 BasicProgramSetup 配合
+
+如果需要 `--help` 支持,在 main 中注册 `BasicProgramSetup` 并设置 clap 帮助的输出模式:
+
+```rust
+// Features: ["clap"]
+// Dependencies:
+// clap = "4"
+@@@use mingling::setup::BasicProgramSetup;
+@@@use mingling::macros::dispatcher_clap;
+@@@#[derive(Default, clap::Parser, Groupped)]
+@@@#[dispatcher_clap("greet", CMDGreet)]
+@@@pub struct EntryGreet {
+@@@ name: String,
+@@@}
+@@@#[renderer]
+@@@fn render_greet(greet: EntryGreet) {
+@@@ r_println!("Hello, {}!", greet.name);
+@@@}
+@@@
+fn main() {
+ let mut program = ThisProgram::new();
+ program.with_setup(BasicProgramSetup);
+ program.stdout_setting.clap_help_print_behaviour =
+ mingling::ClapHelpPrintBehaviour::WriteToRenderResult;
+ program.with_dispatcher(CMDGreet);
+ program.exec_and_exit();
+}
+```
+
+详见 [example-clap-binding](https://mingling-rs.github.io/mingling/docs/example-viewer.html?name=example-clap-binding)。
+
+<p align="center" style="font-size: 0.85em; color: gray;">
+ Written by @Weicao-CatilGrass
+</p>