2 个版本
0.0.2 | 2021 年 8 月 26 日 |
---|---|
0.0.1 | 2021 年 8 月 12 日 |
#809 在 编码
45KB
643 行
asking
构建异步提示。
关于
是否想要非阻塞用户输入?这里就是了!
异步 I/O 是一种输入/输出处理方式,允许你在等待答案时做其他事情。
特性
- 异步 - 用户输入时你可以工作,甚至可以超时!
- 常见模式 - 内置常见问题模式,包括
- yn - 是/否问题(见
yn
函数)。 - date - 日期格式为
%Y-%m-%d
(见date
函数)。 - select - 选择一个选项(见
inside
方法)。 - text - 只是一个 String(见
text
函数)。 - T - 你自己的类型!(实现或不实现
FromStr
特质)。
- yn - 是/否问题(见
- 跨平台 - 通用 writer 和 reader!
- 帮助信息 - 帮助用户输入正确的答案。
- 测试和反馈 - 测试输入,并在出错时可选地提供反馈。
- 默认值 - 为空输入添加一个值。
- 标准化的错误处理 - 你可以管理错误!
- 反馈 - 根据接受的值显示最终消息。
- 详尽的文档 - 如果你认为不是,请告诉我!
限制
- 函数的内部可变性 - 所有函数都存储为
Arc<dyn Fn>
。这允许函数和闭包,但这也意味着函数不能持有任何可变引用(因此没有内部可变性)。 - 发送 + 同步 + 'static - 为了允许异步执行,最终所有参数都必须实现此特征。这样你才能真正利用问题的异步执行。如果你使用未实现这些特征的任何东西,那么未来只能以同步方式执行。
- 消费方法 - 方法是消费性的,允许一行构造,同时使复杂构造模式更难。这是因为存在默认值。查看 C-BUILDER。
如果你发现其他任何内容,请告诉我,我将很高兴添加它!
快速示例
只给用户五秒钟时间确认某事,如果没有输入则继续!(而不是继续等待)
use asking::error::Processing;
use std::time::Duration;
let question = asking::yn()
.message("Shall I continue? (you have 5 seconds to answer)")
.default_value(true) // value upon empty input
.timeout(Duration::from_secs(5_u64))
.ask();
match async_std::task::block_on(question) { // we decide to just wait, at most five secs
Ok(true) => println!("Super!"),
Ok(false) => println!("Okay, shutting down..."),
Err(Processing::Timeout { .. }) => println!("I think you are not here, I will continue :)"), // Automatic decision!,
_ => eprintln!("Error with questionnaire, try again later"),
}
查看更多 示例!
使用方法
安装了 cargo-edit 后,只需输入
cargo add asking
即可!
相关包
有几个包用于处理用户输入,我建议查看它们全部!
- ask - 一个通过终端提问的简单工具集。
- dialoguer - 命令行提示库。
- inquire - 用于在终端上构建交互式提示的库。
- promptly - 简单、有偏见的 CLI 提示助手。
- requestty - 易于使用的交互式 CLI 提示集合。
- rprompt - 在控制台应用程序中提示用户输入。
- question - 提问,你还需要什么?
- read_input - 一个简单的 CLI 工具,它会要求用户输入,直到输入的数据有效。
- termion::AsyncReader - 一个异步读取器。
- timeout-readwrite - 为读取器和写入器添加超时功能。
如果你有一个适合的包,请提交一个问题并告诉我。我很乐意添加它!
良好匹配
有些包可以一起使用!
- async-dup - 复制 I/O 处理。
常见问题解答
测试
对具有用户输入的项目进行测试可能具有挑战性。
- 如何向 Stdin 提供输入并从 Stdout 读取?最简单的方法是使用
assert_cmd
包。查看- 示例
testing
。 - 此存储库的
tests
文件夹。 - 更多信息,请参阅 Rust 命令行应用程序书籍中的命令行应用程序部分。
- 示例
依赖关系
~6–16MB
~217K SLoC