use serde::{Deserialize, Serialize};
use std::num::NonZero;
use std::sync::Arc;
use std::sync::atomic::AtomicBool;
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)]
#[serde(rename_all = "lowercase")]
pub enum MatchType {
File,
Directory,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FileMatch {
pub score: u32,
pub path: String,
pub match_type: MatchType,
#[serde(skip_serializing_if = "Option::is_none")]
pub indices: Option<Vec<u32>>,
}
#[derive(Debug)]
pub struct FileSearchResults {
pub matches: Vec<FileMatch>,
pub total_match_count: usize,
}
pub struct FileSearchConfig {
pub pattern_text: String,
pub limit: NonZero<usize>,
pub search_directory: std::path::PathBuf,
pub exclude: Vec<String>,
pub threads: NonZero<usize>,
pub cancel_flag: Arc<AtomicBool>,
pub compute_indices: bool,
pub respect_gitignore: bool,
}