use chrono::NaiveDate;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[derive(Debug, PartialEq, Eq, Clone)]
#[cfg_attr(
feature = "serde",
derive(Serialize, Deserialize),
serde(rename_all = "snake_case", tag = "type")
)]
pub enum Document {
Passport(Passport),
IdentityCard(IdentityCard),
}
#[derive(Debug, PartialEq, Eq, Clone)]
#[cfg_attr(
feature = "serde",
derive(Serialize, Deserialize),
serde(rename_all = "snake_case")
)]
pub enum Gender {
Male,
Female,
Other,
}
#[derive(Debug, PartialEq, Eq, Clone)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct Passport {
pub country: String,
pub surnames: Vec<String>,
pub given_names: Vec<String>,
pub passport_number: String,
pub nationality: String,
pub birth_date: NaiveDate,
pub gender: Gender,
pub expiry_date: NaiveDate,
}
#[derive(Debug, PartialEq, Eq, Clone)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct IdentityCard {
pub country: String,
pub surnames: Vec<String>,
pub given_names: Vec<String>,
pub document_number: String,
pub nationality: String,
pub birth_date: NaiveDate,
pub gender: Gender,
pub expiry_date: NaiveDate,
}