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