use chrono::NaiveDate;
use serde::{Deserialize, Serialize};
use super::common::ApiErrorCode;
use super::email::Email;
use super::ssn::Hetu;
use super::url::Url;
#[must_use]
#[derive(Debug, Clone, Default, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct FtnAuthRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub redirect_url: Option<Url>,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_phone: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_email: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_address: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ref_id: Option<String>,
}
impl FtnAuthRequest {
#[inline]
pub fn new() -> Self {
Self::default()
}
#[inline]
pub fn redirect_url(mut self, url: Url) -> Self {
self.redirect_url = Some(url);
self
}
#[inline]
pub fn request_phone(mut self, v: bool) -> Self {
self.request_phone = Some(v);
self
}
#[inline]
pub fn request_email(mut self, v: bool) -> Self {
self.request_email = Some(v);
self
}
#[inline]
pub fn request_address(mut self, v: bool) -> Self {
self.request_address = Some(v);
self
}
#[inline]
pub fn ref_id(mut self, ref_id: impl Into<String>) -> Self {
self.ref_id = Some(ref_id.into());
self
}
}
#[non_exhaustive]
#[derive(Debug, Clone, Deserialize)]
#[serde(tag = "status")]
pub enum FtnStatus {
#[serde(rename = "PENDING")]
Pending(FtnPending),
#[serde(rename = "COMPLETED")]
Completed(FtnCompleted),
#[serde(rename = "FAILED")]
Failed(FtnFailed),
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FtnPending {
pub id: String,
pub ref_id: Option<String>,
pub url: String,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FtnCompleted {
pub id: String,
pub ref_id: Option<String>,
pub ssn: Option<Hetu>,
pub name: String,
pub given_name: String,
pub surname: String,
pub phone: Option<String>,
pub email: Option<Email>,
pub address: Option<String>,
pub birth_date: Option<NaiveDate>,
pub pid: Option<String>,
pub bank_id: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FtnFailed {
pub id: String,
pub ref_id: Option<String>,
pub error: ApiErrorCode,
}