rain_sdk/models/
common.rs

1//! Common types and models for the Rain SDK
2
3use serde::{Deserialize, Serialize};
4use uuid::Uuid;
5
6/// Address structure
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct Address {
9    pub line1: String,
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub line2: Option<String>,
12    pub city: String,
13    pub region: String,
14    pub postal_code: String,
15    pub country_code: String,
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub country: Option<String>,
18}
19
20/// Application link with parameters
21#[derive(Debug, Clone, Serialize, Deserialize)]
22pub struct ApplicationLink {
23    pub url: String,
24    pub params: ApplicationLinkParams,
25}
26
27/// Application link parameters
28#[derive(Debug, Clone, Serialize, Deserialize)]
29pub struct ApplicationLinkParams {
30    pub user_id: Uuid,
31}
32
33/// Person information structure
34#[derive(Debug, Clone, Serialize, Deserialize)]
35pub struct PersonInfo {
36    pub id: Uuid,
37    pub first_name: String,
38    pub last_name: String,
39    #[serde(skip_serializing_if = "Option::is_none")]
40    pub birth_date: Option<String>, // ISO date format
41    #[serde(skip_serializing_if = "Option::is_none")]
42    pub national_id: Option<String>,
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub country_of_issue: Option<String>,
45    #[serde(skip_serializing_if = "Option::is_none")]
46    pub email: Option<String>,
47    #[serde(skip_serializing_if = "Option::is_none")]
48    pub phone_country_code: Option<String>,
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub phone_number: Option<String>,
51    pub address: Address,
52}
53
54/// Application status enum
55#[derive(Debug, Clone, Serialize, Deserialize)]
56#[serde(rename_all = "lowercase")]
57pub enum ApplicationStatus {
58    Pending,
59    Approved,
60    Rejected,
61    InReview,
62}
63
64/// Document type for company documents
65#[derive(Debug, Clone, Serialize, Deserialize)]
66#[serde(rename_all = "camelCase")]
67pub enum CompanyDocumentType {
68    DirectorsRegistry,
69    StateRegistry,
70    IncumbencyCert,
71    ProofOfAddress,
72    TrustAgreement,
73    InformationStatement,
74    IncorporationCert,
75    IncorporationArticles,
76    ShareholderRegistry,
77    GoodStandingCert,
78    PowerOfAttorney,
79    Other,
80}
81
82/// Document type for user/UBO documents
83#[derive(Debug, Clone, Serialize, Deserialize)]
84#[serde(rename_all = "camelCase")]
85pub enum UserDocumentType {
86    IdCard,
87    Passport,
88    Drivers,
89    ResidencePermit,
90    UtilityBill,
91    Selfie,
92    VideoSelfie,
93    ProfileImage,
94    IdDocPhoto,
95    Agreement,
96    Contract,
97    DriversTranslation,
98    InvestorDoc,
99    VehicleRegistrationCertificate,
100    IncomeSource,
101    PaymentMethod,
102    BankCard,
103    CovidVaccinationForm,
104    Other,
105}
106
107/// Document side enum
108#[derive(Debug, Clone, Serialize, Deserialize)]
109#[serde(rename_all = "lowercase")]
110pub enum DocumentSide {
111    Front,
112    Back,
113}