初次上手!

使用 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