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

相关推荐
懒大王爱吃狼25 分钟前
Python教程:python枚举类定义和使用
开发语言·前端·javascript·python·python基础·python编程·python书籍
paopaokaka_luck3 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
逐·風4 小时前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#
Devil枫5 小时前
Vue 3 单元测试与E2E测试
前端·vue.js·单元测试
码农小旋风5 小时前
详解K8S--声明式API
后端
Peter_chq5 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
Yaml45 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~5 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616885 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端
尚梦5 小时前
uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)
前端·小程序·uni-app