use std::path::{Path, PathBuf};
use serde::{Deserialize, Serialize};
use crate::search::filter::VisibilityConfig;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
pub enum CorpusKind {
#[default]
Directory,
SingleFile,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub struct IndexWalkConfig {
pub follow_links: bool,
pub one_file_system: bool,
pub max_depth: Option<usize>,
pub max_filesize: Option<u64>,
}
impl IndexWalkConfig {
#[must_use]
pub const fn new(follow_links: bool) -> Self {
Self {
follow_links,
one_file_system: false,
max_depth: None,
max_filesize: None,
}
}
}
pub struct IndexConfig<'a> {
pub corpus: CorpusSpec<'a>,
pub walk: IndexWalkConfig,
pub visibility: VisibilityConfig,
}
pub struct CorpusSpec<'a> {
pub root: &'a Path,
pub kind: CorpusKind,
pub follow_links: bool,
pub include_paths: &'a [PathBuf],
pub exclude_paths: &'a [PathBuf],
}