#控制台 #调试 #命令 #命令行 #模型 #应用 #个人

dbgcmd

这是一个在应用程序中实现类似命令行风格的调试控制台的简单库。它不处理渲染或任何单个命令的逻辑。它只模拟控制台的状态。

1 个不稳定版本

0.1.0 2020 年 1 月 14 日

#742 in GUI

CC0 许可证

21KB
345 代码行

dbgcmd

Build Status Crates.io Docs.rs

这是一个在应用程序中实现类似命令行风格的调试控制台的简单库。

它不处理渲染或任何单个命令的逻辑。它只模拟控制台的状态,包括命令历史和是否激活。您定义自己的命令结构/枚举,并驱动控制台的输入。之后,您可以使用 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