rain_sdk/models/
users.rs

1//! Models for user endpoints
2
3use crate::models::common::*;
4use serde::{Deserialize, Serialize};
5use uuid::Uuid;
6
7/// User information
8#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct User {
10    pub id: Uuid,
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub company_id: Option<Uuid>,
13    pub first_name: String,
14    pub last_name: String,
15    pub email: String,
16    pub is_active: bool,
17    pub is_terms_of_service_accepted: bool,
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub address: Option<Address>,
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub phone_country_code: Option<String>,
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub phone_number: Option<String>,
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub wallet_address: Option<String>,
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub solana_address: Option<String>,
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub tron_address: Option<String>,
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub stellar_address: Option<String>,
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub application_status: Option<ApplicationStatus>,
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub application_external_verification_link: Option<ApplicationLink>,
36    #[serde(skip_serializing_if = "Option::is_none")]
37    pub application_completion_link: Option<ApplicationLink>,
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub application_reason: Option<String>,
40}
41
42/// Request to create a user in a company
43#[derive(Debug, Clone, Serialize, Deserialize)]
44pub struct CreateCompanyUserRequest {
45    pub first_name: String,
46    pub last_name: String,
47    pub email: String,
48    pub is_terms_of_service_accepted: bool,
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub birth_date: Option<String>,
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub wallet_address: Option<String>,
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub solana_address: Option<String>,
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub address: Option<Address>,
57    #[serde(skip_serializing_if = "Option::is_none")]
58    pub phone_country_code: Option<String>,
59    #[serde(skip_serializing_if = "Option::is_none")]
60    pub phone_number: Option<String>,
61}
62
63/// Request to create an authorized user
64#[derive(Debug, Clone, Serialize, Deserialize)]
65pub struct CreateUserRequest {
66    pub first_name: String,
67    pub last_name: String,
68    pub email: String,
69    #[serde(skip_serializing_if = "Option::is_none")]
70    pub wallet_address: Option<String>,
71    #[serde(skip_serializing_if = "Option::is_none")]
72    pub solana_address: Option<String>,
73    #[serde(skip_serializing_if = "Option::is_none")]
74    pub address: Option<Address>,
75    #[serde(skip_serializing_if = "Option::is_none")]
76    pub phone_country_code: Option<String>,
77    #[serde(skip_serializing_if = "Option::is_none")]
78    pub phone_number: Option<String>,
79}
80
81/// Request to update a user
82#[derive(Debug, Clone, Serialize, Deserialize)]
83pub struct UpdateUserRequest {
84    #[serde(skip_serializing_if = "Option::is_none")]
85    pub first_name: Option<String>,
86    #[serde(skip_serializing_if = "Option::is_none")]
87    pub last_name: Option<String>,
88    #[serde(skip_serializing_if = "Option::is_none")]
89    pub email: Option<String>,
90    #[serde(skip_serializing_if = "Option::is_none")]
91    pub is_active: Option<bool>,
92    #[serde(skip_serializing_if = "Option::is_none")]
93    pub is_terms_of_service_accepted: Option<bool>,
94    #[serde(skip_serializing_if = "Option::is_none")]
95    pub address: Option<Address>,
96    #[serde(skip_serializing_if = "Option::is_none")]
97    pub phone_country_code: Option<String>,
98    #[serde(skip_serializing_if = "Option::is_none")]
99    pub phone_number: Option<String>,
100    #[serde(skip_serializing_if = "Option::is_none")]
101    pub wallet_address: Option<String>,
102    #[serde(skip_serializing_if = "Option::is_none")]
103    pub solana_address: Option<String>,
104    #[serde(skip_serializing_if = "Option::is_none")]
105    pub tron_address: Option<String>,
106    #[serde(skip_serializing_if = "Option::is_none")]
107    pub stellar_address: Option<String>,
108}
109
110/// Query parameters for listing users
111#[derive(Debug, Clone, Serialize, Deserialize)]
112pub struct ListUsersParams {
113    pub company_id: Option<Uuid>,
114    pub cursor: Option<String>,
115    pub limit: Option<u32>,
116}
117
118/// Response for list of users (just an array of users)
119pub type ListUsersResponse = Vec<User>;