llm 1.3.8

A Rust library unifying multiple LLM backends.
Documentation
use crossterm::event::{KeyCode, KeyEvent};

use super::super::{OverlayAction, OverlayResult};

pub(super) fn handle_search(
    state: &mut crate::runtime::SearchState,
    key: KeyEvent,
) -> OverlayResult {
    match key.code {
        KeyCode::Esc => OverlayResult::close(OverlayAction::Handled),
        KeyCode::Enter => OverlayResult::action(OverlayAction::JumpToSearch),
        KeyCode::Up => {
            state.prev();
            OverlayResult::action(OverlayAction::Handled)
        }
        KeyCode::Down => {
            state.next();
            OverlayResult::action(OverlayAction::Handled)
        }
        _ => OverlayResult::action(handle_search_query(state, key.code)),
    }
}

fn handle_search_query(state: &mut crate::runtime::SearchState, code: KeyCode) -> OverlayAction {
    match code {
        KeyCode::Backspace => {
            state.pop_query();
            OverlayAction::UpdateSearch
        }
        KeyCode::Char(ch) => {
            state.push_query(ch);
            OverlayAction::UpdateSearch
        }
        _ => OverlayAction::None,
    }
}