use serde::{Deserialize, Serialize};
use super::common::{ApiErrorCode, Country};
use super::org_number::OrgNumber;
use super::url::Url;
#[non_exhaustive]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum FrejaRegistrationLevel {
#[serde(rename = "EXTENDED")]
Extended,
#[serde(rename = "PLUS")]
Plus,
}
impl Default for FrejaRegistrationLevel {
#[inline]
fn default() -> Self {
Self::Extended
}
}
#[must_use]
#[derive(Debug, Clone, Default, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct FrejaAuthRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub ssn: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub callback_url: Option<Url>,
#[serde(skip_serializing_if = "Option::is_none")]
pub min_registration_level: Option<FrejaRegistrationLevel>,
#[serde(skip_serializing_if = "Option::is_none")]
pub org_number: Option<OrgNumber>,
#[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 FrejaAuthRequest {
#[inline]
pub fn new() -> Self {
Self::default()
}
#[inline]
pub fn ssn(mut self, v: impl Into<String>) -> Self {
self.ssn = Some(v.into());
self
}
#[inline]
pub fn callback_url(mut self, url: Url) -> Self {
self.callback_url = Some(url);
self
}
#[inline]
pub fn min_registration_level(mut self, v: FrejaRegistrationLevel) -> Self {
self.min_registration_level = Some(v);
self
}
#[inline]
pub fn org_number(mut self, org_number: OrgNumber) -> Self {
self.org_number = Some(org_number);
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
}
}
#[must_use]
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct FrejaBackchannelAuthRequest {
pub ssn: String,
pub country: Country,
#[serde(skip_serializing_if = "Option::is_none")]
pub callback_url: Option<Url>,
pub min_registration_level: FrejaRegistrationLevel,
#[serde(skip_serializing_if = "Option::is_none")]
pub org_number: Option<OrgNumber>,
#[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 FrejaBackchannelAuthRequest {
#[inline]
pub fn new(
ssn: impl Into<String>,
country: Country,
min_registration_level: FrejaRegistrationLevel,
) -> Self {
Self {
ssn: ssn.into(),
country,
min_registration_level,
callback_url: None,
org_number: None,
request_address: None,
ref_id: None,
}
}
#[inline]
pub fn callback_url(mut self, url: Url) -> Self {
self.callback_url = Some(url);
self
}
#[inline]
pub fn org_number(mut self, org_number: OrgNumber) -> Self {
self.org_number = Some(org_number);
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
}
}
#[must_use]
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct FrejaSignRequest {
pub text: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub ssn: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub callback_url: Option<Url>,
#[serde(skip_serializing_if = "Option::is_none")]
pub min_registration_level: Option<FrejaRegistrationLevel>,
#[serde(skip_serializing_if = "Option::is_none")]
pub org_number: Option<OrgNumber>,
#[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 FrejaSignRequest {
#[inline]
pub fn new(text: impl Into<String>) -> Self {
Self {
text: text.into(),
ssn: None,
callback_url: None,
min_registration_level: None,
org_number: None,
request_address: None,
ref_id: None,
}
}
#[inline]
pub fn ssn(mut self, v: impl Into<String>) -> Self {
self.ssn = Some(v.into());
self
}
#[inline]
pub fn callback_url(mut self, url: Url) -> Self {
self.callback_url = Some(url);
self
}
#[inline]
pub fn min_registration_level(mut self, v: FrejaRegistrationLevel) -> Self {
self.min_registration_level = Some(v);
self
}
#[inline]
pub fn org_number(mut self, org_number: OrgNumber) -> Self {
self.org_number = Some(org_number);
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
}
}
#[must_use]
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct FrejaBackchannelSignRequest {
pub ssn: String,
pub country: Country,
pub text: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub callback_url: Option<Url>,
#[serde(skip_serializing_if = "Option::is_none")]
pub min_registration_level: Option<FrejaRegistrationLevel>,
#[serde(skip_serializing_if = "Option::is_none")]
pub org_number: Option<OrgNumber>,
#[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 FrejaBackchannelSignRequest {
#[inline]
pub fn new(ssn: impl Into<String>, country: Country, text: impl Into<String>) -> Self {
Self {
ssn: ssn.into(),
country,
text: text.into(),
callback_url: None,
min_registration_level: None,
org_number: None,
request_address: None,
ref_id: None,
}
}
#[inline]
pub fn callback_url(mut self, url: Url) -> Self {
self.callback_url = Some(url);
self
}
#[inline]
pub fn min_registration_level(mut self, v: FrejaRegistrationLevel) -> Self {
self.min_registration_level = Some(v);
self
}
#[inline]
pub fn org_number(mut self, org_number: OrgNumber) -> Self {
self.org_number = Some(org_number);
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 FrejaStatus {
#[serde(rename = "PENDING")]
Pending(FrejaPending),
#[serde(rename = "COMPLETED")]
Completed(FrejaCompleted),
#[serde(rename = "FAILED")]
Failed(FrejaFailed),
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FrejaPending {
pub id: String,
pub ref_id: Option<String>,
pub auto_start_token: Option<String>,
pub qr_data: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FrejaCompleted {
pub id: String,
pub ref_id: Option<String>,
pub ssn: String,
pub country: Country,
pub name: String,
pub given_name: String,
pub surname: String,
pub address: Option<String>,
pub company_signatory_text: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FrejaFailed {
pub id: String,
pub ref_id: Option<String>,
pub error: ApiErrorCode,
}