cloudiful-docling-convert 0.3.0

Core Rust library for Docling-backed document conversion
Documentation
use serde::{Deserialize, Serialize};
use serde_json::Value;

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ConversionStatus {
    Pending,
    Started,
    Failure,
    Success,
    PartialSuccess,
    Skipped,
}

impl ConversionStatus {
    pub fn is_terminal(self) -> bool {
        !matches!(self, Self::Pending | Self::Started)
    }

    pub fn is_successful(self) -> bool {
        matches!(self, Self::Success | Self::PartialSuccess)
    }
}

#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct TaskPostResponse {
    pub task_id: String,
}

#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct TaskStatusResponse {
    pub task_id: String,
    pub task_type: Option<String>,
    pub task_status: ConversionStatus,
    #[serde(default)]
    pub task_position: Option<u64>,
    #[serde(default)]
    pub task_meta: Option<TaskProcessingMeta>,
    #[serde(default)]
    pub error_message: Option<String>,
    #[serde(default)]
    pub failure: Option<PublicFailureInfo>,
}

#[derive(Deserialize, Serialize, Debug, Clone, Default)]
pub struct TaskProcessingMeta {
    pub num_docs: u64,
    #[serde(default)]
    pub num_processed: u64,
    #[serde(default)]
    pub num_succeeded: u64,
    #[serde(default)]
    pub num_partially_succeeded: u64,
    #[serde(default)]
    pub num_failed: u64,
}

#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct PublicFailureInfo {
    pub category: String,
    pub message: String,
    pub retryable: bool,
    pub phase: String,
    #[serde(default)]
    pub details: Option<Value>,
}

#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct TaskFailureResult {
    #[serde(default = "task_failure_kind")]
    pub kind: String,
    pub failure: PublicFailureInfo,
}

fn task_failure_kind() -> String {
    "TaskFailureResult".to_string()
}

#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct DoclingErrorItem {
    #[serde(default)]
    pub component_type: Option<String>,
    #[serde(default)]
    pub module_name: Option<String>,
    #[serde(default)]
    pub error_message: Option<String>,
    #[serde(default)]
    pub category: Option<String>,
    #[serde(default)]
    pub page_no: Option<u64>,
}

#[derive(Deserialize, Serialize, Debug, Clone, Default)]
pub struct ExportDocumentResponse {
    pub filename: String,
    #[serde(default)]
    pub md_content: Option<String>,
    #[serde(default)]
    pub json_content: Option<Value>,
    #[serde(default)]
    pub html_content: Option<String>,
    #[serde(default)]
    pub text_content: Option<String>,
    #[serde(default)]
    pub doctags_content: Option<String>,
    #[serde(default)]
    pub doclang_content: Option<String>,
}

#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct DocumentResultItem {
    #[serde(rename = "content", alias = "document")]
    pub document: ExportDocumentResponse,
    pub status: ConversionStatus,
    #[serde(default)]
    pub errors: Vec<DoclingErrorItem>,
}

#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct ConvertDocumentResponse {
    pub document: ExportDocumentResponse,
    pub status: ConversionStatus,
    #[serde(default)]
    pub errors: Vec<DoclingErrorItem>,
    #[serde(default)]
    pub processing_time: f64,
}

#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct DoclingChunk {
    pub filename: String,
    pub chunk_index: u64,
    pub text: String,
    #[serde(default)]
    pub raw_text: Option<String>,
    #[serde(default)]
    pub num_tokens: Option<u64>,
    #[serde(default)]
    pub headings: Option<Vec<String>>,
    #[serde(default)]
    pub captions: Option<Vec<String>>,
    #[serde(default)]
    pub doc_items: Vec<String>,
    #[serde(default)]
    pub page_numbers: Option<Vec<u64>>,
    #[serde(default)]
    pub metadata: Option<Value>,
}

#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct ChunkDocumentResponse {
    #[serde(default)]
    pub chunks: Vec<DoclingChunk>,
    #[serde(default)]
    pub documents: Vec<DocumentResultItem>,
    #[serde(default)]
    pub processing_time: f64,
}