1use api_types::api::viviswap::payment::ViviPaymentMethodsResponse;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Serialize)]
6pub struct NewViviswapUser {
7 pub username: String,
9}
10
11#[derive(Debug, Eq, PartialEq, Deserialize, Serialize, Clone)]
13pub enum ViviswapVerificationStep {
14 Undefined,
16 General,
18 Personal,
20 Residence,
22 Identity,
24 Amla,
26 Documents,
28}
29
30impl From<api_types::api::viviswap::kyc::KycStep> for ViviswapVerificationStep {
31 fn from(value: api_types::api::viviswap::kyc::KycStep) -> Self {
32 match value {
33 api_types::api::viviswap::kyc::KycStep::Undefined => Self::Undefined,
34 api_types::api::viviswap::kyc::KycStep::General => Self::General,
35 api_types::api::viviswap::kyc::KycStep::Personal => Self::Personal,
36 api_types::api::viviswap::kyc::KycStep::Identity => Self::Identity,
37 api_types::api::viviswap::kyc::KycStep::Residence => Self::Residence,
38 api_types::api::viviswap::kyc::KycStep::Amla => Self::Amla,
39 api_types::api::viviswap::kyc::KycStep::Document => Self::Documents,
40 api_types::api::viviswap::kyc::KycStep::Completed => Self::Undefined,
42 }
43 }
44}
45
46#[derive(Debug, Eq, PartialEq, Deserialize, Serialize, Clone)]
48pub enum ViviswapVerificationStatus {
49 Verified,
51 Unverified,
53 PartiallyVerified,
55}
56
57impl From<api_types::api::viviswap::kyc::KycVerificationStatus> for ViviswapVerificationStatus {
58 fn from(value: api_types::api::viviswap::kyc::KycVerificationStatus) -> Self {
59 match value {
60 api_types::api::viviswap::kyc::KycVerificationStatus::Unverified => Self::Unverified,
61 api_types::api::viviswap::kyc::KycVerificationStatus::PartiallyVerified => Self::PartiallyVerified,
62 api_types::api::viviswap::kyc::KycVerificationStatus::Verified => Self::Verified,
63 }
64 }
65}
66
67#[derive(Debug, PartialEq, Deserialize, Serialize, Clone)]
69pub struct ViviswapAddressDetail {
70 pub id: String,
72 pub address: String,
74 pub is_verified: bool,
76}
77
78#[derive(Debug, Deserialize, Serialize, PartialEq, Clone)]
80pub struct ViviswapState {
81 pub verification_status: ViviswapVerificationStatus,
83 pub monthly_limit_eur: f32,
85 pub next_verification_step: ViviswapVerificationStep,
87 pub partial_kyc_details_input: ViviswapPartiallyKycDetails,
89 pub current_iban: Option<ViviswapAddressDetail>,
91 pub payment_methods: Option<ViviPaymentMethodsResponse>,
93}
94
95impl ViviswapState {
96 pub fn new() -> ViviswapState {
98 ViviswapState {
99 verification_status: ViviswapVerificationStatus::Unverified,
100 monthly_limit_eur: 0.0,
101 next_verification_step: ViviswapVerificationStep::General,
102 partial_kyc_details_input: ViviswapPartiallyKycDetails::new(),
103 current_iban: Option::None,
104 payment_methods: Option::None,
105 }
106 }
107}
108
109impl Default for ViviswapState {
110 fn default() -> Self {
111 Self::new()
112 }
113}
114#[derive(Debug, PartialEq, Deserialize, Serialize)]
116pub struct ViviswapKycStatus {
117 pub full_name: String,
119 pub submission_step: ViviswapVerificationStep,
121 pub verified_step: ViviswapVerificationStep,
123 pub verification_status: ViviswapVerificationStatus,
125 pub monthly_limit_eur: f32,
127}
128
129#[derive(Debug)]
131pub enum ViviswapDetailUpdateStrategy {
132 Replace,
134 Add,
136}
137
138#[derive(Debug, Default, Eq, PartialEq, Deserialize, Serialize, Clone)]
140pub struct ViviswapPartiallyKycDetails {
141 pub is_individual: Option<bool>,
143 pub is_pep: Option<bool>,
145 pub is_us_citizen: Option<bool>,
147 pub is_regulatory_disclosure: Option<bool>,
149 pub country_of_residence: Option<String>,
151 pub nationality: Option<String>,
153 pub full_name: Option<String>,
155 pub date_of_birth: Option<String>,
157}
158
159impl ViviswapPartiallyKycDetails {
160 pub fn new() -> ViviswapPartiallyKycDetails {
162 ViviswapPartiallyKycDetails {
163 is_individual: Option::None,
164 is_pep: Option::None,
165 is_us_citizen: Option::None,
166 is_regulatory_disclosure: Option::None,
167 country_of_residence: Option::None,
168 nationality: Option::None,
169 full_name: Option::None,
170 date_of_birth: Option::None,
171 }
172 }
173}
174
175#[derive(Debug, Deserialize, Serialize, Clone)]
177pub struct ViviswapDepositDetails {
178 pub reference: String,
180 pub beneficiary: String,
182 pub name_of_bank: String,
184 pub address_of_bank: String,
186 pub iban: String,
188 pub bic: String,
190}
191
192#[derive(Debug, Serialize)]
194pub struct ViviswapDeposit {
195 pub contract_id: String,
197 pub deposit_address: String,
199 pub details: ViviswapDepositDetails,
201}
202
203#[derive(Serialize)]
205pub struct ViviswapWithdrawalDetails {
206 pub reference: String,
208 pub wallet_id: String,
210 pub crypto_address: String,
212}
213
214#[derive(Serialize)]
216pub struct ViviswapWithdrawal {
217 pub contract_id: String,
219 pub deposit_address: String,
221 pub details: ViviswapWithdrawalDetails,
223}