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