Skip to main content

cloudiful_docling_convert/models/
api.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
5#[serde(rename_all = "snake_case")]
6pub enum ConversionStatus {
7    Pending,
8    Started,
9    Failure,
10    Success,
11    PartialSuccess,
12    Skipped,
13}
14
15impl ConversionStatus {
16    pub fn is_terminal(self) -> bool {
17        !matches!(self, Self::Pending | Self::Started)
18    }
19
20    pub fn is_successful(self) -> bool {
21        matches!(self, Self::Success | Self::PartialSuccess)
22    }
23}
24
25#[derive(Deserialize, Serialize, Debug, Clone)]
26pub struct TaskPostResponse {
27    pub task_id: String,
28}
29
30#[derive(Deserialize, Serialize, Debug, Clone)]
31pub struct TaskStatusResponse {
32    pub task_id: String,
33    pub task_type: Option<String>,
34    pub task_status: ConversionStatus,
35    #[serde(default)]
36    pub task_position: Option<u64>,
37    #[serde(default)]
38    pub task_meta: Option<TaskProcessingMeta>,
39    #[serde(default)]
40    pub error_message: Option<String>,
41    #[serde(default)]
42    pub failure: Option<PublicFailureInfo>,
43}
44
45#[derive(Deserialize, Serialize, Debug, Clone, Default)]
46pub struct TaskProcessingMeta {
47    pub num_docs: u64,
48    #[serde(default)]
49    pub num_processed: u64,
50    #[serde(default)]
51    pub num_succeeded: u64,
52    #[serde(default)]
53    pub num_partially_succeeded: u64,
54    #[serde(default)]
55    pub num_failed: u64,
56}
57
58#[derive(Deserialize, Serialize, Debug, Clone)]
59pub struct PublicFailureInfo {
60    pub category: String,
61    pub message: String,
62    pub retryable: bool,
63    pub phase: String,
64    #[serde(default)]
65    pub details: Option<Value>,
66}
67
68#[derive(Deserialize, Serialize, Debug, Clone)]
69pub struct TaskFailureResult {
70    #[serde(default = "task_failure_kind")]
71    pub kind: String,
72    pub failure: PublicFailureInfo,
73}
74
75fn task_failure_kind() -> String {
76    "TaskFailureResult".to_string()
77}
78
79#[derive(Deserialize, Serialize, Debug, Clone)]
80pub struct DoclingErrorItem {
81    #[serde(default)]
82    pub component_type: Option<String>,
83    #[serde(default)]
84    pub module_name: Option<String>,
85    #[serde(default)]
86    pub error_message: Option<String>,
87    #[serde(default)]
88    pub category: Option<String>,
89    #[serde(default)]
90    pub page_no: Option<u64>,
91}
92
93#[derive(Deserialize, Serialize, Debug, Clone, Default)]
94pub struct ExportDocumentResponse {
95    pub filename: String,
96    #[serde(default)]
97    pub md_content: Option<String>,
98    #[serde(default)]
99    pub json_content: Option<Value>,
100    #[serde(default)]
101    pub html_content: Option<String>,
102    #[serde(default)]
103    pub text_content: Option<String>,
104    #[serde(default)]
105    pub doctags_content: Option<String>,
106    #[serde(default)]
107    pub doclang_content: Option<String>,
108}
109
110#[derive(Deserialize, Serialize, Debug, Clone)]
111pub struct DocumentResultItem {
112    #[serde(rename = "content", alias = "document")]
113    pub document: ExportDocumentResponse,
114    pub status: ConversionStatus,
115    #[serde(default)]
116    pub errors: Vec<DoclingErrorItem>,
117}
118
119#[derive(Deserialize, Serialize, Debug, Clone)]
120pub struct ConvertDocumentResponse {
121    pub document: ExportDocumentResponse,
122    pub status: ConversionStatus,
123    #[serde(default)]
124    pub errors: Vec<DoclingErrorItem>,
125    #[serde(default)]
126    pub processing_time: f64,
127}
128
129#[derive(Deserialize, Serialize, Debug, Clone)]
130pub struct DoclingChunk {
131    pub filename: String,
132    pub chunk_index: u64,
133    pub text: String,
134    #[serde(default)]
135    pub raw_text: Option<String>,
136    #[serde(default)]
137    pub num_tokens: Option<u64>,
138    #[serde(default)]
139    pub headings: Option<Vec<String>>,
140    #[serde(default)]
141    pub captions: Option<Vec<String>>,
142    #[serde(default)]
143    pub doc_items: Vec<String>,
144    #[serde(default)]
145    pub page_numbers: Option<Vec<u64>>,
146    #[serde(default)]
147    pub metadata: Option<Value>,
148}
149
150#[derive(Deserialize, Serialize, Debug, Clone)]
151pub struct ChunkDocumentResponse {
152    #[serde(default)]
153    pub chunks: Vec<DoclingChunk>,
154    #[serde(default)]
155    pub documents: Vec<DocumentResultItem>,
156    #[serde(default)]
157    pub processing_time: f64,
158}