use serde::{Deserialize, Serialize};
use validator::Validate;
#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
pub struct OcrResponse {
#[serde(skip_serializing_if = "Option::is_none")]
pub task_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub message: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub words_result_num: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub words_result: Option<Vec<WordsResultItem>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
pub struct WordsResultItem {
#[serde(skip_serializing_if = "Option::is_none")]
pub location: Option<Location>,
#[serde(skip_serializing_if = "Option::is_none")]
pub words: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub probability: Option<Probability>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
pub struct Location {
#[serde(skip_serializing_if = "Option::is_none")]
pub left: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub top: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub width: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub height: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
pub struct Probability {
#[serde(skip_serializing_if = "Option::is_none")]
pub average: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub variance: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub min: Option<f32>,
}