use rustyline::highlight::MatchingBracketHighlighter;
use rustyline::validate::MatchingBracketValidator;
use rustyline::{
Cmd, Completer, Editor, EventHandler, Helper, Highlighter, Hinter, KeyCode, KeyEvent,
Modifiers, Result, Validator,
};
#[derive(Completer, Default, Helper, Highlighter, Hinter, Validator)]
struct InputValidator {
#[rustyline(Validator)]
brackets: MatchingBracketValidator,
#[rustyline(Highlighter)]
highlighter: MatchingBracketHighlighter,
}
fn main() -> Result<()> {
let mut rl = Editor::<InputValidator, _>::default()?;
rl.bind_sequence(
KeyEvent(KeyCode::Char('s'), Modifiers::CTRL),
EventHandler::Simple(Cmd::Newline),
);
let input = rl.readline("> ")?;
println!("Input: {input}");
Ok(())
}