idkollen_client/models/
vipps.rs1use chrono::NaiveDate;
2use serde::{Deserialize, Serialize};
3
4use super::common::ApiErrorCode;
5use super::email::Email;
6use super::ssn::Nnin;
7use super::url::Url;
8
9#[must_use]
11#[derive(Debug, Clone, Default, Serialize)]
12#[serde(rename_all = "camelCase")]
13pub struct VippsAuthRequest {
14 #[serde(skip_serializing_if = "Option::is_none")]
16 pub redirect_url: Option<Url>,
17 #[serde(skip_serializing_if = "Option::is_none")]
19 pub request_ssn: Option<bool>,
20 #[serde(skip_serializing_if = "Option::is_none")]
22 pub request_phone: Option<bool>,
23 #[serde(skip_serializing_if = "Option::is_none")]
25 pub request_email: Option<bool>,
26 #[serde(skip_serializing_if = "Option::is_none")]
28 pub request_address: Option<bool>,
29 #[serde(skip_serializing_if = "Option::is_none")]
31 pub ref_id: Option<String>,
32 #[serde(skip_serializing_if = "Option::is_none")]
34 pub app_callback_uri: Option<Url>,
35}
36
37impl VippsAuthRequest {
38 #[inline]
39 pub fn new() -> Self {
40 Self::default()
41 }
42
43 #[inline]
44 pub fn redirect_url(mut self, url: Url) -> Self {
45 self.redirect_url = Some(url);
46 self
47 }
48
49 #[inline]
50 pub fn request_ssn(mut self, v: bool) -> Self {
51 self.request_ssn = Some(v);
52 self
53 }
54
55 #[inline]
56 pub fn request_phone(mut self, v: bool) -> Self {
57 self.request_phone = Some(v);
58 self
59 }
60
61 #[inline]
62 pub fn request_email(mut self, v: bool) -> Self {
63 self.request_email = Some(v);
64 self
65 }
66
67 #[inline]
68 pub fn request_address(mut self, v: bool) -> Self {
69 self.request_address = Some(v);
70 self
71 }
72
73 #[inline]
74 pub fn ref_id(mut self, ref_id: impl Into<String>) -> Self {
75 self.ref_id = Some(ref_id.into());
76 self
77 }
78
79 #[inline]
80 pub fn app_callback_uri(mut self, uri: Url) -> Self {
81 self.app_callback_uri = Some(uri);
82 self
83 }
84}
85
86#[must_use]
88#[derive(Debug, Clone, Serialize)]
89#[serde(rename_all = "camelCase")]
90pub struct VippsBackchannelAuthRequest {
91 pub phone: String,
93 #[serde(skip_serializing_if = "Option::is_none")]
95 pub request_ssn: Option<bool>,
96 #[serde(skip_serializing_if = "Option::is_none")]
98 pub request_email: Option<bool>,
99 #[serde(skip_serializing_if = "Option::is_none")]
101 pub request_address: Option<bool>,
102 #[serde(skip_serializing_if = "Option::is_none")]
104 pub callback_url: Option<Url>,
105 #[serde(skip_serializing_if = "Option::is_none")]
107 pub ref_id: Option<String>,
108}
109
110impl VippsBackchannelAuthRequest {
111 #[inline]
112 pub fn new(phone: impl Into<String>) -> Self {
113 Self {
114 phone: phone.into(),
115 request_ssn: None,
116 request_email: None,
117 request_address: None,
118 callback_url: None,
119 ref_id: None,
120 }
121 }
122
123 #[inline]
124 pub fn request_ssn(mut self, v: bool) -> Self {
125 self.request_ssn = Some(v);
126 self
127 }
128
129 #[inline]
130 pub fn request_email(mut self, v: bool) -> Self {
131 self.request_email = Some(v);
132 self
133 }
134
135 #[inline]
136 pub fn request_address(mut self, v: bool) -> Self {
137 self.request_address = Some(v);
138 self
139 }
140
141 #[inline]
142 pub fn callback_url(mut self, url: Url) -> Self {
143 self.callback_url = Some(url);
144 self
145 }
146
147 #[inline]
148 pub fn ref_id(mut self, ref_id: impl Into<String>) -> Self {
149 self.ref_id = Some(ref_id.into());
150 self
151 }
152}
153
154#[non_exhaustive]
156#[derive(Debug, Clone, Deserialize)]
157#[serde(tag = "status")]
158pub enum VippsStatus {
159 #[serde(rename = "PENDING")]
160 Pending(VippsPending),
161 #[serde(rename = "COMPLETED")]
162 Completed(VippsCompleted),
163 #[serde(rename = "FAILED")]
164 Failed(VippsFailed),
165}
166
167#[derive(Debug, Clone, Deserialize)]
169#[serde(rename_all = "camelCase")]
170pub struct VippsPending {
171 pub id: String,
172 pub ref_id: Option<String>,
173 pub url: Option<String>,
175}
176
177#[derive(Debug, Clone, Deserialize)]
179#[serde(rename_all = "camelCase")]
180pub struct VippsCompleted {
181 pub id: String,
182 pub ref_id: Option<String>,
183 pub ssn: Option<Nnin>,
185 pub name: String,
186 pub given_name: String,
187 pub surname: String,
188 pub phone: Option<String>,
189 pub email: Option<Email>,
190 pub address: Option<String>,
191 pub birth_date: Option<NaiveDate>,
192 pub pid: Option<String>,
193 pub bank_id: Option<String>,
194}
195
196#[derive(Debug, Clone, Deserialize)]
198#[serde(rename_all = "camelCase")]
199pub struct VippsFailed {
200 pub id: String,
201 pub ref_id: Option<String>,
202 pub error: ApiErrorCode,
203}