use crate::ai::suggestion::Suggestion;
use crate::autocomplete::AutocompleteState;
use crate::input::InputState;
use crate::query::QueryState;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ApplyResult {
pub applied: bool,
pub query: String,
}
pub fn apply_suggestion(
suggestion: &Suggestion,
input_state: &mut InputState,
query_state: &mut QueryState,
autocomplete_state: &mut AutocompleteState,
) -> ApplyResult {
let query = suggestion.query.clone();
input_state
.textarea
.move_cursor(tui_textarea::CursorMove::Head);
input_state
.textarea
.move_cursor(tui_textarea::CursorMove::End);
while !input_state.query().is_empty() {
input_state.textarea.delete_char();
}
input_state.textarea.insert_str(&query);
debug_assert_eq!(
input_state.textarea.cursor().1,
query.chars().count(),
"Cursor should be at end of inserted query"
);
autocomplete_state.hide();
query_state.execute(&query);
ApplyResult {
applied: true,
query,
}
}
#[cfg(test)]
#[path = "apply_tests.rs"]
mod apply_tests;