use serde::{Deserialize, Serialize};
use super::common::ApiErrorCode;
use super::url::Url;
#[must_use]
#[derive(Debug, Clone, Default, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct AgeVerificationRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub min_age: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_age: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ref_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub callback_url: Option<Url>,
#[serde(skip_serializing_if = "Option::is_none")]
pub redirect_url: Option<Url>,
}
impl AgeVerificationRequest {
#[inline]
pub fn new() -> Self {
Self::default()
}
#[inline]
pub fn min_age(mut self, age: u32) -> Self {
self.min_age = Some(age);
self
}
#[inline]
pub fn max_age(mut self, age: u32) -> Self {
self.max_age = Some(age);
self
}
#[inline]
pub fn ref_id(mut self, ref_id: impl Into<String>) -> Self {
self.ref_id = Some(ref_id.into());
self
}
#[inline]
pub fn callback_url(mut self, url: Url) -> Self {
self.callback_url = Some(url);
self
}
#[inline]
pub fn redirect_url(mut self, url: Url) -> Self {
self.redirect_url = Some(url);
self
}
}
#[non_exhaustive]
#[derive(Debug, Clone, Deserialize)]
#[serde(tag = "status")]
pub enum AgeVerificationStatus {
#[serde(rename = "PENDING")]
Pending(AgeVerificationPending),
#[serde(rename = "COMPLETED")]
Completed(AgeVerificationCompleted),
#[serde(rename = "FAILED")]
Failed(AgeVerificationFailed),
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AgeVerificationPending {
pub id: String,
pub url: Option<String>,
pub min_age: Option<u32>,
pub max_age: Option<u32>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AgeVerificationCompleted {
pub id: String,
pub age_verified: bool,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AgeVerificationFailed {
pub id: String,
pub error: ApiErrorCode,
}