1 个不稳定版本
0.1.0 | 2020 年 1 月 14 日 |
---|
#742 in GUI
21KB
345 代码行
dbgcmd
这是一个在应用程序中实现类似命令行风格的调试控制台的简单库。
它不处理渲染或任何单个命令的逻辑。它只模拟控制台的状态,包括命令历史和是否激活。您定义自己的命令结构/枚举,并驱动控制台的输入。之后,您可以使用 confirm
方法将输入的文本解析为命令。
在调试模式下运行时(当设置了 debug_assertions
标志时),整个控制台将禁用。这是为了避免意外包含调试控制台。
要覆盖此设置,您可以使用 force-enabled
功能,这将允许控制台在发布模式下工作。
示例
输入
use std::str::FromStr;
use dbgcmd::Console;
#[derive(Debug, PartialEq, Eq)]
enum Command {
SayHi,
SayBye,
}
impl FromStr for Command {
type Err = ();
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"hi" => Ok(Command::SayHi),
"bye" => Ok(Command::SayBye),
_ => Err(())
}
}
}
let mut console = Console::new();
// Your application passes along key inputs
console.receive_char('h');
console.receive_char('i');
match console.confirm().unwrap() {
Command::SayHi => println!("Hi!"),
Command::SayBye => println!("Bye!"),
}
历史记录
use dbgcmd::Console;
type Command = String;
let mut console = Console::new();
// Set the entire entry instead of individual characters
console.set_entry("first".to_owned());
console.confirm::<Command>();
console.set_entry("second".to_owned());
console.confirm::<Command>();
console.set_entry("third".to_owned());
console.confirm::<Command>();
// Scroll up or down the history
console.up();
assert_eq!(console.entry(), "third".to_owned());
console.up();
assert_eq!(console.entry(), "second".to_owned());
console.up();
assert_eq!(console.entry(), "first".to_owned());
console.down();
console.down();
console.down();
assert!(console.entry().is_empty());
依赖项
~460KB