From bb7f00dbef3bf4c7c00c1969cb0089de51bd9ba9 Mon Sep 17 00:00:00 2001 From: Conrad Ludgate Date: Sun, 26 Mar 2023 15:47:38 +0100 Subject: chore: use fork of skim (#803) * use fuzzy-matcher instead of skim switch to a search-engine abstraction * fmt * fix deprecated warnings --- src/command/client/search/engines.rs | 46 ++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/command/client/search/engines.rs (limited to 'src/command/client/search/engines.rs') diff --git a/src/command/client/search/engines.rs b/src/command/client/search/engines.rs new file mode 100644 index 00000000..878b1431 --- /dev/null +++ b/src/command/client/search/engines.rs @@ -0,0 +1,46 @@ +use async_trait::async_trait; +use atuin_client::{ + database::{Context, Database}, + history::History, + settings::{FilterMode, SearchMode}, +}; +use eyre::Result; + +use super::cursor::Cursor; + +pub mod db; +pub mod skim; + +pub fn engine(search_mode: SearchMode) -> Box { + match search_mode { + SearchMode::Skim => Box::new(skim::Search::new()) as Box<_>, + mode => Box::new(db::Search(mode)) as Box<_>, + } +} + +pub struct SearchState { + pub input: Cursor, + pub filter_mode: FilterMode, + pub context: Context, +} + +#[async_trait] +pub trait SearchEngine: Send + Sync + 'static { + async fn full_query( + &mut self, + state: &SearchState, + db: &mut dyn Database, + ) -> Result>; + + async fn query(&mut self, state: &SearchState, db: &mut dyn Database) -> Result> { + if state.input.as_str().is_empty() { + Ok(db + .list(state.filter_mode, &state.context, Some(200), true) + .await? + .into_iter() + .collect::>()) + } else { + self.full_query(state, db).await + } + } +} -- cgit v1.3.1