shellql 0.1.7-beta

A Vim- and tmux-inspired terminal database manager for developers
Documentation
use super::data::{Column, Row};
use super::pane::PaneId;

#[derive(Debug, Clone, PartialEq, Eq)]
pub enum EditorMode {
    Normal,
    Insert,
}

#[derive(Debug, Clone)]
pub struct QueryResult {
    pub columns: Vec<Column>,
    pub rows: Vec<Row>,
    pub rows_affected: Option<u64>,
    pub error: Option<String>,
}

#[derive(Debug, Clone)]
pub struct QueryEditorState {
    pub id: PaneId,
    pub input: String,
    pub cursor_pos: usize,
    pub history: Vec<String>,
    pub history_index: Option<usize>,
    pub result: Option<QueryResult>,
    pub mode: EditorMode,
}

impl QueryEditorState {
    pub fn new() -> Self {
        Self {
            id: PaneId::new(),
            input: String::new(),
            cursor_pos: 0,
            history: vec![],
            history_index: None,
            result: None,
            mode: EditorMode::Normal,
        }
    }

    pub fn submit(&mut self) -> String {
        let query = self.input.clone();
        if !query.trim().is_empty() {
            self.history.push(query.clone());
        }
        self.history_index = None;
        self.input.clear();
        self.cursor_pos = 0;
        query
    }
}