use chrono::NaiveDate;
use serde::{Deserialize, Serialize};
use super::common::ApiErrorCode;
use super::email::Email;
use super::ssn::Nnin;
use super::url::Url;
#[must_use]
#[derive(Debug, Clone, Default, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct BankIdNoAuthRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub redirect_url: Option<Url>,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_ssn: Option<bool>,
#[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>,
#[serde(skip_serializing_if = "Option::is_none")]
pub app_callback_uri: Option<Url>,
}
impl BankIdNoAuthRequest {
#[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_ssn(mut self, v: bool) -> Self {
self.request_ssn = Some(v);
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
}
#[inline]
pub fn app_callback_uri(mut self, uri: Url) -> Self {
self.app_callback_uri = Some(uri);
self
}
}
#[must_use]
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct BankIdNoBackchannelAuthRequest {
pub ssn: Nnin,
#[serde(skip_serializing_if = "Option::is_none")]
pub callback_url: Option<Url>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ref_id: Option<String>,
}
impl BankIdNoBackchannelAuthRequest {
#[inline]
pub fn new(ssn: Nnin) -> Self {
Self {
ssn,
callback_url: None,
ref_id: None,
}
}
#[inline]
pub fn callback_url(mut self, url: Url) -> Self {
self.callback_url = Some(url);
self
}
#[inline]
pub fn ref_id(mut self, ref_id: impl Into<String>) -> Self {
self.ref_id = Some(ref_id.into());
self
}
}
#[must_use]
#[derive(Debug, Clone, Default, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct BankIdNoSignRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub redirect_url: Option<Url>,
#[serde(skip_serializing_if = "Option::is_none")]
pub text: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub documents: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_ssn: Option<bool>,
#[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 BankIdNoSignRequest {
#[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 text(mut self, v: impl Into<String>) -> Self {
self.text = Some(v.into());
self
}
#[inline]
pub fn documents(mut self, v: Vec<String>) -> Self {
self.documents = Some(v);
self
}
#[inline]
pub fn request_ssn(mut self, v: bool) -> Self {
self.request_ssn = Some(v);
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")]
#[expect(clippy::large_enum_variant)]
pub enum BankIdNoStatus {
#[serde(rename = "PENDING")]
Pending(BankIdNoPending),
#[serde(rename = "COMPLETED")]
Completed(BankIdNoCompleted),
#[serde(rename = "FAILED")]
Failed(BankIdNoFailed),
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BankIdNoPending {
pub id: String,
pub ref_id: Option<String>,
pub url: Option<String>,
pub binding_message: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BankIdNoCompleted {
pub id: String,
pub ref_id: Option<String>,
pub ssn: Option<Nnin>,
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>,
pub sign_result: Option<BankIdNoSignResult>,
pub signed_documents: Option<Vec<BankIdNoSignedDocument>>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BankIdNoFailed {
pub id: String,
pub ref_id: Option<String>,
pub error: ApiErrorCode,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BankIdNoSignResult {
pub end_user: String,
pub merchant: String,
pub hash: String,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BankIdNoSignedDocument {
pub id: String,
pub hash: String,
}