use serde::{Deserialize, Serialize};
use super::super::formats::OutputFormat;
use super::super::ocr::{OcrConfig, OcrStrategy};
use super::super::page::PageConfig;
use super::super::processing::{ChunkingConfig, PostProcessorConfig};
use super::types::{ImageExtractionConfig, LanguageDetectionConfig, TokenReductionOptions, UrlExtractionConfig};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct FileExtractionConfig {
#[serde(skip_serializing_if = "Option::is_none")]
pub enable_quality_processing: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ocr: Option<OcrConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub force_ocr: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ocr_strategy: Option<OcrStrategy>,
#[serde(skip_serializing_if = "Option::is_none")]
pub force_ocr_pages: Option<Vec<u32>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub disable_ocr: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub chunking: Option<ChunkingConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content_filter: Option<super::super::content_filter::ContentFilterConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub images: Option<ImageExtractionConfig>,
#[cfg(feature = "pdf")]
#[serde(skip_serializing_if = "Option::is_none")]
pub pdf_options: Option<super::super::pdf::PdfConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub token_reduction: Option<TokenReductionOptions>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language_detection: Option<LanguageDetectionConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pages: Option<PageConfig>,
#[cfg(any(feature = "keywords-yake", feature = "keywords-rake"))]
#[serde(skip_serializing_if = "Option::is_none")]
pub keywords: Option<crate::keywords::KeywordConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub postprocessor: Option<PostProcessorConfig>,
#[cfg(feature = "html")]
#[serde(skip_serializing_if = "Option::is_none")]
#[cfg_attr(alef, alef(skip))]
pub html_options: Option<html_to_markdown_rs::ConversionOptions>,
#[cfg(feature = "html")]
#[serde(skip_serializing_if = "Option::is_none")]
pub html_output: Option<super::super::html_output::HtmlOutputConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub result_format: Option<crate::types::ResultFormat>,
#[serde(skip_serializing_if = "Option::is_none")]
pub output_format: Option<OutputFormat>,
#[serde(skip_serializing_if = "Option::is_none")]
pub include_document_structure: Option<bool>,
#[cfg(feature = "layout-types")]
#[serde(skip_serializing_if = "Option::is_none")]
pub layout: Option<super::super::layout::LayoutDetectionConfig>,
#[cfg(feature = "transcription-types")]
#[serde(skip_serializing_if = "Option::is_none")]
pub transcription: Option<super::super::transcription::TranscriptionConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub timeout_secs: Option<u64>,
#[cfg(feature = "tree-sitter")]
#[serde(skip_serializing_if = "Option::is_none")]
pub tree_sitter: Option<super::super::tree_sitter::TreeSitterConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub structured_extraction: Option<super::super::llm::StructuredExtractionConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<UrlExtractionConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ner: Option<super::super::ner::NerConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub redaction: Option<super::super::redaction::RedactionConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub summarization: Option<super::super::summarization::SummarizationConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub translation: Option<super::super::translation::TranslationConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_classification: Option<super::super::classification::PageClassificationConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub chunk_classification: Option<super::super::chunk_classification::ChunkClassificationConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub captioning: Option<super::super::captioning::CaptioningConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub qr_codes: Option<bool>,
}