Skip to main content

zai_rs/model/ocr/
request.rs

1use serde::Serialize;
2use validator::Validate;
3
4/// OCR tool types
5#[derive(Debug, Clone, Serialize)]
6pub enum OcrToolType {
7    #[serde(rename = "hand_write")]
8    HandWrite,
9}
10
11/// Language types for OCR recognition
12#[derive(Debug, Clone, Serialize)]
13pub enum OcrLanguageType {
14    /// Auto-detect language
15    #[serde(rename = "AUTO")]
16    Auto,
17
18    /// Chinese and English (default)
19    #[serde(rename = "CHN_ENG")]
20    ChnEng,
21
22    /// English
23    #[serde(rename = "ENG")]
24    Eng,
25
26    /// Japanese
27    #[serde(rename = "JAP")]
28    Jap,
29
30    /// Korean
31    #[serde(rename = "KOR")]
32    Kor,
33
34    /// French
35    #[serde(rename = "FRE")]
36    Fre,
37
38    /// Spanish
39    #[serde(rename = "SPA")]
40    Spa,
41
42    /// Portuguese
43    #[serde(rename = "POR")]
44    Por,
45
46    /// German
47    #[serde(rename = "GER")]
48    Ger,
49
50    /// Italian
51    #[serde(rename = "ITA")]
52    Ita,
53
54    /// Russian
55    #[serde(rename = "RUS")]
56    Rus,
57
58    /// Danish
59    #[serde(rename = "DAN")]
60    Dan,
61
62    /// Dutch
63    #[serde(rename = "DUT")]
64    Dut,
65
66    /// Malay
67    #[serde(rename = "MAL")]
68    Mal,
69
70    /// Swedish
71    #[serde(rename = "SWE")]
72    Swe,
73
74    /// Indonesian
75    #[serde(rename = "IND")]
76    Ind,
77
78    /// Polish
79    #[serde(rename = "POL")]
80    Pol,
81
82    /// Romanian
83    #[serde(rename = "ROM")]
84    Rom,
85
86    /// Turkish
87    #[serde(rename = "TUR")]
88    Tur,
89
90    /// Greek
91    #[serde(rename = "GRE")]
92    Gre,
93
94    /// Hungarian
95    #[serde(rename = "HUN")]
96    Hun,
97
98    /// Thai
99    #[serde(rename = "THA")]
100    Tha,
101
102    /// Vietnamese
103    #[serde(rename = "VIE")]
104    Vie,
105
106    /// Arabic
107    #[serde(rename = "ARA")]
108    Ara,
109
110    /// Hindi
111    #[serde(rename = "HIN")]
112    Hin,
113}
114
115/// Body parameters holder for OCR request (used to build multipart form)
116#[derive(Debug, Clone, Serialize, Validate)]
117pub struct OcrBody {
118    /// Tool type (fixed as "hand_write" for handwriting recognition)
119    #[serde(skip_serializing_if = "Option::is_none")]
120    pub tool_type: Option<OcrToolType>,
121
122    /// Language type for recognition (default: CHN_ENG)
123    #[serde(skip_serializing_if = "Option::is_none")]
124    pub language_type: Option<OcrLanguageType>,
125
126    /// Whether to return confidence information
127    #[serde(skip_serializing_if = "Option::is_none")]
128    pub probability: Option<bool>,
129
130    /// Client-provided unique request id
131    #[serde(skip_serializing_if = "Option::is_none")]
132    pub request_id: Option<String>,
133
134    /// End user id (6..=128 chars)
135    #[serde(skip_serializing_if = "Option::is_none")]
136    #[validate(length(min = 6, max = 128))]
137    pub user_id: Option<String>,
138}
139
140impl Default for OcrBody {
141    fn default() -> Self {
142        Self::new()
143    }
144}
145
146impl OcrBody {
147    pub fn new() -> Self {
148        Self {
149            tool_type: None,
150            language_type: None,
151            probability: None,
152            request_id: None,
153            user_id: None,
154        }
155    }
156
157    pub fn with_tool_type(mut self, tool_type: OcrToolType) -> Self {
158        self.tool_type = Some(tool_type);
159        self
160    }
161
162    pub fn with_language_type(mut self, language_type: OcrLanguageType) -> Self {
163        self.language_type = Some(language_type);
164        self
165    }
166
167    pub fn with_probability(mut self, probability: bool) -> Self {
168        self.probability = Some(probability);
169        self
170    }
171
172    pub fn with_request_id(mut self, request_id: impl Into<String>) -> Self {
173        self.request_id = Some(request_id.into());
174        self
175    }
176
177    pub fn with_user_id(mut self, user_id: impl Into<String>) -> Self {
178        self.user_id = Some(user_id.into());
179        self
180    }
181}