初次上手!
使用 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