use serde::{Deserialize, Serialize};
use super::super::formats::OutputFormat;
use super::super::ocr::OcrConfig;
use super::super::page::PageConfig;
use super::super::processing::{ChunkingConfig, PostProcessorConfig};
use super::types::{ImageExtractionConfig, LanguageDetectionConfig, TokenReductionConfig};
#[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 force_ocr_pages: Option<Vec<usize>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub chunking: Option<ChunkingConfig>,
#[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<TokenReductionConfig>,
#[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")]
pub html_options: Option<html_to_markdown_rs::ConversionOptions>,
#[serde(skip_serializing_if = "Option::is_none")]
pub result_format: Option<crate::types::OutputFormat>,
#[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-detection")]
#[serde(skip_serializing_if = "Option::is_none")]
pub layout: Option<super::super::layout::LayoutDetectionConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub timeout_secs: Option<u64>,
}