Rust: 🚀 对话宏框架 dialoguer-macro 0.3 版本震撼发布

🚀 对话宏框架 dialoguer-macro 0.3 版本震撼发布:引领命令行交互设计新篇章

🎉 尊敬的开发者们,今天我怀着无比激动的心情向大家隆重推荐 dialoguer-macro 库的最新力作------0.3版本!这一版本的重大更新将彻底颠覆您对命令行用户交互设计的传统认知。我们已在新版本中倾情引入了对枚举类型和嵌套结构的强大支持,让您轻松构建出层次分明、结构优雅的命令行交互界面!

📚 文档教程直通车yexiyue.github.io/dialogue-ma...

🎯 实战演示开篇

在这篇博客中,我们将通过一个鲜活具体的实例来揭示如何运用 dialoguer-macro 0.3 中 SubAsker 属性及其关联的 AskerBuildEnumAsker 特质,打造一套高效且易用的命令行信息收集流程。

让我们一睹为快!

首先 ,定义了一个名为 UserInput 的结构体,并利用 #[derive(Asker)]#[asker(theme = "...")] 宏对其进行装饰,从而实现既美观又功能丰富的命令行输入界面。

值得注意的是,结构体中的 detailed_infoidentity 字段都应用了 #[asker(SubAsker)] 标记,这表示它们将以子询问器(SubAsker)的角色逐层深入地获取用户输入数据:

rust 复制代码
use dialogue_macro::{Asker, Build, EnumAsker};

#[derive(Debug, Asker)]
#[asker(theme = "dialogue_macro::ColorfulTheme")]
struct UserInput {
    // 基础信息字段
    username: String,
    educational_institution: String,

    // 使用 SubAsker 收集详细用户信息
    #[asker(SubAsker)]
    detailed_info: DetailedUserInfo,

    // 使用 SubAsker 进行身份选择
    #[asker(SubAsker)]
    identity: EnumSelection,
}

接下来,我们精心设计了两个用于嵌套询问的数据结构:

DetailedUserInfo 结构体 ,封装了用户的电子邮件地址和年龄属性。为了适应 SubAsker 的工作方式,此结构体不仅实现了 DebugCloneAsker 特性,还额外实现了 Build 特质,并在 impl Build for DetailedUserInfo 中定义了 .build() 方法,以便按序从用户那里获取邮箱地址和年龄:

rust 复制代码
#[derive(Debug, Clone, Asker)]
struct DetailedUserInfo {
    email_address: String,
    age: u8,
}

impl Build for DetailedUserInfo {
    fn build() -> Self {
        Self::asker()
            .email_address("请提供您的邮箱地址")
            .age("请输入您的年龄")
            .finish()
    }
}

EnumSelection 枚举 ,包含了 Teacher、Student 和 Leader 三个选项。该枚举除了实现了 DebugClone 特质外,还派生了 EnumAsker 特质,这意味着它能够以清晰直观的方式呈现在用户面前供其选择:

rust 复制代码
#[derive(Debug, EnumAsker, Clone)]
#[asker(prompt="请选择您的身份", default="Student")]
enum EnumSelection {
    Teacher,
    Student,
    Leader,
}

最后,在主函数中,我们创建并实例化了 UserInput 对象,并按照逻辑顺序依次调用各个字段对应的询问方法:

rust 复制代码
fn main() {
    let collected_user_input = UserInput::asker()
        .username("请输入用户名")
        .educational_institution("请输入您的学校名称")

        // 调用 SubAsker 收集详细的用户信息
        .detailed_info()

        // 调用另一个 SubAsker 让用户从枚举选项中做出选择
        .identity()

        // 收集所有用户输入并结束询问过程
        .finish();

    println!("{:?}", collected_user_input);
}

当运行程序时,用户会按照预设的层级顺序逐一回答问题,体验到一种既复杂又有条不紊的命令行交互之旅!

通过上述实例代码,我们展示了如何运用 SubAsker 等特性轻松实现层次分明的命令行交互设计。如果您对这个库的功能感到兴奋,并希望在您的项目中尝试这些创新功能,请立即前往我们的 GitHub 仓库地址:

👉 GitHub 项目主页github.com/yexiyue/dia...

在此,诚挚邀请您关注我的项目、尝试使用新版 dialoguer-macro,并参与到项目的成长中来。只需点击仓库页面上的 "Star" 按钮,即可给予我宝贵的肯定与支持。同时,我也热切期待您的反馈、贡献以及实际应用案例分享!

相关推荐
郭老二2 小时前
【前端】vue3:编译步骤
前端
不在逃避q3 小时前
Trae/Vs Code/Cursor命令行无法跑npm命令
前端·arcgis·npm
mldong3 小时前
从 mldong 到 jeeflow:一个工作流引擎的独立进化
后端
夏殇之殁3 小时前
包中创建自定义列表项。 . 使用自定义列表项进行数据绑定 . 将天气预报数据保存到本地内存表,通过LiveBindings进行显示。 ...
服务器·前端·javascript
The Chosen One9853 小时前
高进度算法模板速记(待完善)
java·前端·算法
陈随易3 小时前
MoonBit抓包模块pcap,查看电脑的每一次联网通信
前端·后端·程序员
Aaron - Wistron3 小时前
Web API C# (Furion版)带 单元测试
开发语言·后端·c#
卷无止境4 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境4 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
新中地GIS开发老师4 小时前
WebGIS开发学生作品|低空航天管理与航线规划系统
前端·javascript·webgis·三维gis开发