cloudiful_docling_convert/models/
api.rs1use 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}