From b1ac9fb8ed90699474e911674f1a60b139563858 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Wed, 27 May 2026 12:48:54 +0800 Subject: Add Chinese tutorial for Step 1 of Mingling framework --- docs/_zh_CN/pages/2-step1.md | 140 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 docs/_zh_CN/pages/2-step1.md (limited to 'docs/_zh_CN/pages/2-step1.md') diff --git a/docs/_zh_CN/pages/2-step1.md b/docs/_zh_CN/pages/2-step1.md new file mode 100644 index 0000000..56f4b3c --- /dev/null +++ b/docs/_zh_CN/pages/2-step1.md @@ -0,0 +1,140 @@ +

初次上手!

+

+ 使用 Mingling 开发简易水果名搜索命令行程序 +

+ +## 前言 + +在本篇示例中,我将介绍如何使用 **Mingling** 开发基本的命令行程序,它包括: + +1. `fruit-mgr list` 命令 +2. `fruit-mgr list --help` 帮助页面 + + + +## 一、导入依赖 + +首先,请确保您的项目依赖 **Mingling** + +若未导入依赖,您可以在 `Cargo.toml` 添加如下内容: + +```toml +[dependencies.mingling] +version = "0.1.9" +features = [""] +``` + +## 二、编写 `main.rs`,创建基本的项目 + +在 `src/main.rs` 中,我们将编写程序的入口函数: + + + +## 三、注册 `list` 子命令 + + + +## 四、实现 `EntryList` 行为 + + + +

+ Written by @Weicao-CatilGrass +

+ +## 五、渲染 `ResultFruits` + +在上一步中,`handle_entry_list` 链接收 `EntryList`,并输出了 `ResultFruits`。 + +接下来我们就要为 `ResultFruits` 渲染出最终的结果,使整个程序像下图这样排列: + +
+ +
+ +让我们开始编写代码吧: + + + +### 💡 关于 `r_println!` 宏 + +`r_println!` 宏并不是对 `println!` 的包装 + +它是为 `#[renderer]` 宏中 **隐式注入** 的 `&mut RenderResult` 值提供。 + +在 `r_println!` 调用时,不会立刻向 stdout 输出信息,而是会被累计到 `&mut RenderResult` 中,在程序结束时整体输出。 + + +## 六、编译并运行 + +现在您已经完成了 `list` 命令,现在可以使用 `cargo run` 运行您的程序: + +```bash +cargo run -- list +``` + +您将会看到如下输出: + +``` +Apple +Banana +Orange +``` + +
+完整代码 + +```rust +use mingling::prelude::*; + +dispatcher!("list", CMDList => EntryList); + +fn main() { + let mut program = ThisProgram::new(); + program.with_dispatcher(CMDList); + program.exec_and_exit(); +} + +pack!(ResultFruits = Vec); + +#[chain] +fn handle_entry_list(_prev: EntryList) -> Next { + let fruits = vec![ + "Apple".to_string(), + "Banana".to_string(), + "Orange".to_string(), + ]; + ResultFruits::new(fruits) +} + +#[renderer] +fn render_fruits(result: ResultFruits) { + let vec: &Vec = &*result; + for fruit in vec { + r_println!("{}", fruit) + } +} + +gen_program!(); + +``` +
+ +

+ Written by @Weicao-CatilGrass +

-- cgit