#![cfg_attr(coverage_nightly, coverage(off))]
use super::chunker::{chunk_code, ChunkType, Language};
use super::turso_vector_db::{EmbeddingEntry, TursoVectorDB};
use std::collections::HashMap;
use std::hash::{Hash, Hasher};
use std::path::Path;
use std::sync::{Arc, RwLock};
use std::time::Instant;
use walkdir::WalkDir;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum SearchMode {
SemanticOnly,
KeywordOnly,
Hybrid,
}
#[derive(Debug, Clone)]
pub struct SearchQuery {
pub query: String,
pub mode: SearchMode,
pub language_filter: Option<String>,
pub file_pattern: Option<String>,
pub chunk_type_filter: Option<ChunkType>,
pub limit: usize,
}
#[derive(Debug, Clone)]
pub struct SearchResult {
pub file_path: String,
pub chunk_name: String,
pub chunk_type: String,
pub language: String,
pub similarity_score: f64,
pub snippet: String,
pub start_line: usize,
pub end_line: usize,
}
#[derive(Debug, Clone)]
pub struct IndexStats {
pub total_files: usize,
pub total_chunks: usize,
pub created: usize,
pub updated: usize,
pub skipped: usize,
pub duration_ms: u64,
}
#[derive(Debug)]
pub struct LocalEmbedder {
dimension: usize,
document_frequencies: RwLock<HashMap<String, usize>>,
doc_count: RwLock<usize>,
}
pub struct SemanticSearchEngine {
vector_db: Arc<TursoVectorDB>,
embedder: Arc<RwLock<LocalEmbedder>>,
}
include!("search_engine_embedder.rs");
include!("search_engine_core.rs");
include!("search_engine_tests.rs");