use crate::model::NodeLabel;
use super::error::QueryError;
use super::{QueryResult, SearchResult};
pub trait QueryEngine: Send + Sync {
fn cypher(&self, query: &str) -> std::result::Result<QueryResult, QueryError>;
fn search(
&self,
text: &str,
project: Option<&str>,
limit: usize,
) -> std::result::Result<Vec<SearchResult>, QueryError>;
fn search_by_type(
&self,
label: NodeLabel,
project: Option<&str>,
limit: usize,
) -> std::result::Result<Vec<SearchResult>, QueryError>;
fn search_by_file(
&self,
file_path: &str,
project: Option<&str>,
) -> std::result::Result<Vec<SearchResult>, QueryError>;
fn fulltext_search(
&self,
text: &str,
project: Option<&str>,
limit: usize,
) -> std::result::Result<Vec<SearchResult>, QueryError>;
#[cfg(feature = "embed")]
fn semantic_search(
&self,
text: &str,
project: Option<&str>,
limit: usize,
embed_client: &dyn crate::embed::EmbedClient,
) -> std::result::Result<Vec<SearchResult>, QueryError>;
}
#[cfg(test)]
const _: () = {
fn _assert_object_safe(_: &dyn QueryEngine) {}
fn _assert_send_sync<T: Send + Sync + ?Sized>() {}
fn _check() {
_assert_send_sync::<dyn QueryEngine>();
let _ = _assert_object_safe;
}
};