#[derive(Asker)]
{
// Attributes available to this derive:
#[input]
#[confirm]
#[password]
#[select]
#[multiselect]
#[asker]
}
Expand description
§Asker 属性宏
Asker属性宏提供了一种便捷的方式来实现用户交互式输入,支持以下五种属性宏:
input
confirm
password
select
multiselect
§Input
input
属性宏用于创建输入框。可以通过prompt
属性设置提示信息,并通过default
属性设置默认值。
示例
#![allow(unused)]
use dialogue_macro::Asker;
#[derive(Asker, Debug)]
struct User {
name: String,
#[input(prompt = "请输入您的邮箱地址: ")]
email: String,
#[input(default = 16)]
age: u8,
#[input(prompt = "请输入您的学校: ", default = "清华大学")]
school: Option<String>,
}
fn main() {
let user = User::asker()
.name("请输入您的姓名: ")
.email()
.age("请输入您的年龄: ")
.school()
.finish();
println!("{:?}", user);
}
§Confirm
confirm
属性宏用于创建确认对话框,允许用户选择是/否。通过prompt
属性设置询问内容,也可以通过default
属性预设默认值。
示例
#![allow(unused)]
use dialogue_macro::Asker;
#[derive(Asker, Debug)]
struct User {
boy: bool,
#[confirm(prompt = "您是否是学生?")]
student: Option<bool>,
}
fn main() {
let user = User::asker().boy("您是男孩吗?").student().finish();
println!("{:?}", user);
}
§Password
password
属性宏用于创建密码输入框,可以设置prompt
属性来定义初始密码输入提示,confirmation
属性用来设置再次确认密码的提示,以及在两次输入不一致时显示的mismatch
提示信息。
示例
#![allow(unused)]
use dialogue_macro::Asker;
#[derive(Asker, Debug)]
struct User {
#[password()]
password: Option<String>,
#[password(
prompt = "请输入您的密码:",
confirmation = "请再次输入您的密码:",
mismatch = "您的密码不匹配"
)]
password2: String,
}
fn main() {
let user = User::asker().password2().password("请输入您的密码:").finish();
println!("{:?}", user);
}
§Select
select
属性宏用于创建下拉选择框,通过prompt
属性设置提示语,options
属性定义可选项列表,并可通过default
属性设置默认选中项。
示例
#![allow(unused)]
use dialogue_macro::Asker;
#[derive(Asker, Debug)]
struct User {
#[select(prompt = "请选择您的性别", options = ["男", "女", "其他"], default = 1)]
sex: String,
#[select(prompt = "请选择您的学校: ", default = 1,options=[
School{
name: "清华大学".to_string(),
},
School{
name: "北京大学".to_string(),
},
School{
name: "河南理工大学".to_string(),
}
])]
school: Option<School>,
}
#[derive(Debug, Clone)]
struct School {
name: String,
}
impl ToString for School {
fn to_string(&self) -> String {
self.name.clone()
}
}
fn main() {
let user = User::asker().sex().school().finish();
println!("{:?}", user);
}
§MultiSelect
multiselect
属性宏用于创建多选框,用户可以从多个选项中进行选择。同样通过prompt
属性设置提示语,options
属性定义可选项列表,default
属性设置默认已选中的项。
示例
#![allow(unused)]
use dialogue_macro::Asker;
#[derive(Asker, Debug)]
struct User {
#[multiselect(prompt = "请选择您的兴趣爱好", options = ["吃", "睡", "编程"], default=[1])]
favorite: Vec<String>,
#[multiselect(prompt = "请选择您的学校: ", default = [1,2],options=[
School{
name: "清华大学".to_string(),
},
School{
name: "北京大学".to_string(),
},
School{
name: "河南理工大学".to_string(),
}
])]
school: Vec<School>,
}
#[derive(Debug, Clone)]
struct School {
name: String,
}
impl ToString for School {
fn to_string(&self) -> String {
self.name.clone()
}
}
fn main() {
let user = User::asker().school().favorite().finish();
println!("{:?}", user);
}