use std::borrow::Cow;
use ahash::AHashMap;
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ProcessConfig {
pub language: Cow<'static, str>,
#[cfg_attr(feature = "serde", serde(default = "default_true"))]
pub structure: bool,
#[cfg_attr(feature = "serde", serde(default = "default_true"))]
pub imports: bool,
#[cfg_attr(feature = "serde", serde(default = "default_true"))]
pub exports: bool,
#[cfg_attr(feature = "serde", serde(default))]
pub comments: bool,
#[cfg_attr(feature = "serde", serde(default))]
pub docstrings: bool,
#[cfg_attr(feature = "serde", serde(default))]
pub symbols: bool,
#[cfg_attr(feature = "serde", serde(default))]
pub diagnostics: bool,
#[cfg_attr(feature = "serde", serde(default))]
pub chunk_max_size: Option<usize>,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none", default))]
pub extractions: Option<AHashMap<String, crate::extract::ExtractionPattern>>,
}
#[cfg(feature = "serde")]
fn default_true() -> bool {
true
}
impl Default for ProcessConfig {
fn default() -> Self {
Self {
language: Cow::Borrowed(""),
structure: true,
imports: true,
exports: true,
comments: false,
docstrings: false,
symbols: false,
diagnostics: false,
chunk_max_size: None,
extractions: None,
}
}
}
impl ProcessConfig {
pub fn new(language: impl Into<String>) -> Self {
Self {
language: Cow::Owned(language.into()),
..Default::default()
}
}
pub fn with_chunking(mut self, max_size: usize) -> Self {
self.chunk_max_size = Some(max_size);
self
}
pub fn all(mut self) -> Self {
self.structure = true;
self.imports = true;
self.exports = true;
self.comments = true;
self.docstrings = true;
self.symbols = true;
self.diagnostics = true;
self
}
pub fn minimal(mut self) -> Self {
self.structure = false;
self.imports = false;
self.exports = false;
self.comments = false;
self.docstrings = false;
self.symbols = false;
self.diagnostics = false;
self
}
}