aboutsummaryrefslogtreecommitdiff
path: root/docs/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/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/pages/7-argument-parse-clap.md')
-rw-r--r--docs/pages/7-argument-parse-clap.md87
1 files changed, 87 insertions, 0 deletions
diff --git a/docs/pages/7-argument-parse-clap.md b/docs/pages/7-argument-parse-clap.md
new file mode 100644
index 0000000..e912c38
--- /dev/null
+++ b/docs/pages/7-argument-parse-clap.md
@@ -0,0 +1,87 @@
+<h1 align="center">Parsing Arguments with Clap</h1>
+<p align="center">
+ Use clap for more complex argument parsing
+</p>
+
+Picker is suitable for lightweight arg extraction, but when there are many args, complex validation rules, or you need auto-generated `--help`, you can use [clap](https://crates.io/crates/clap).
+
+## Enable clap feature
+
+```toml
+[dependencies.mingling]
+features = ["clap"]
+
+[dependencies.clap]
+version = "4"
+features = ["derive", "color"]
+```
+
+## dispatcher_clap
+
+Add `#[dispatcher_clap]` on a `clap::Parser` struct to auto-generate a 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);
+}
+```
+
+## Working with BasicProgramSetup
+
+If you need `--help` support, register `BasicProgramSetup` in main and set the clap help output mode:
+
+```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();
+}
+```
+
+See [example-clap-binding](https://mingling-rs.github.io/mingling/docs/example-viewer.html?name=example-clap-binding) for more details.
+
+<p align="center" style="font-size: 0.85em; color: gray;">
+ Written by @Weicao-CatilGrass
+</p>