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" 按钮,即可给予我宝贵的肯定与支持。同时,我也热切期待您的反馈、贡献以及实际应用案例分享!

相关推荐
uzong2 小时前
技术故障复盘模版
后端
GetcharZp2 小时前
基于 Dify + 通义千问的多模态大模型 搭建发票识别 Agent
后端·llm·agent
加班是不可能的,除非双倍日工资3 小时前
css预编译器实现星空背景图
前端·css·vue3
桦说编程3 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
IT毕设实战小研3 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi3 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
gnip4 小时前
vite和webpack打包结构控制
前端·javascript
excel4 小时前
在二维 Canvas 中模拟三角形绕 X、Y 轴旋转
前端
阿华的代码王国4 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
一条上岸小咸鱼4 小时前
Kotlin 基本数据类型(三):Booleans、Characters
android·前端·kotlin