use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum IdType {
IdCard,
Passport,
HkMacauPass,
TaiwanPass,
Other,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum ImageType {
Jpeg,
Png,
Bmp,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum AuthenticationStatus {
Pending,
Processing,
Success,
Failed,
Timeout,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CropParameters {
pub x: i32,
pub y: i32,
pub width: i32,
pub height: i32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FaceRegion {
pub x: i32,
pub y: i32,
pub width: i32,
pub height: i32,
pub confidence: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Identity {
pub identity_id: String,
pub name: String,
pub id_number: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub id_type: Option<IdType>,
pub created_at: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub updated_at: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FaceImage {
pub image_id: String,
pub identity_id: String,
pub image_type: ImageType,
pub uploaded_at: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_size: Option<i64>,
#[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)]
pub struct AuthenticationResult {
pub identity_id: String,
pub status: AuthenticationStatus,
#[serde(skip_serializing_if = "Option::is_none")]
pub confidence_score: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub started_at: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub completed_at: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub error_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub error_message: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub processed_images: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuthenticationStats {
pub total_count: i64,
pub success_count: i64,
pub failed_count: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub average_confidence: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub average_processing_time: Option<i64>,
}