leo_interpreter/
dialoguer_input.rsuse super::ui::{Ui, UserData};
use colored::*;
pub struct DialoguerUi {
history: dialoguer::BasicHistory,
}
impl DialoguerUi {
pub fn new() -> Self {
DialoguerUi { history: dialoguer::BasicHistory::new() }
}
}
impl Ui for DialoguerUi {
fn display_user_data(&mut self, data: &UserData<'_>) {
if let Some(result) = data.result {
println!("{}: {}", "Result".bold(), result.bright_cyan());
}
println!("{}", data.message);
if let Some(highlight_span) = data.highlight {
let first = data.code.get(0..highlight_span.0).expect("spans should be valid");
let second = data.code.get(highlight_span.0..highlight_span.1).expect("spans should be valid");
let third = data.code.get(highlight_span.1..).expect("spans should be valid");
println!("{first}{}{third}", second.red());
} else {
println!("{}", data.code);
}
for (i, future) in data.futures.iter().enumerate() {
println!("{i:>4}: {future}");
}
for (i, watchpoint) in data.watchpoints.iter().enumerate() {
println!("{i:>4}: {watchpoint}");
}
}
fn receive_user_input(&mut self) -> String {
dialoguer::Input::with_theme(&dialoguer::theme::ColorfulTheme::default())
.with_prompt("Command?")
.history_with(&mut self.history)
.interact_text()
.unwrap()
}
}