Skip to main content

bybit_api/api/
user.rs

1//! User API endpoints.
2
3use crate::client::BybitClient;
4use crate::error::Result;
5use crate::models::user::*;
6
7impl BybitClient {
8    /// Get affiliate sub-affiliate list.
9    pub async fn get_affiliate_sub_list(
10        &self,
11        cursor: Option<&str>,
12        size: Option<i64>,
13        start_date: Option<&str>,
14        end_date: Option<&str>,
15        sub_aff_id: Option<i64>,
16    ) -> Result<GetAffiliateSubListResponse> {
17        let size_str;
18        let sub_aff_id_str;
19        let mut params: Vec<(&str, &str)> = vec![];
20        if let Some(c) = cursor {
21            params.push(("cursor", c));
22        }
23        if let Some(s) = size {
24            size_str = s.to_string();
25            params.push(("size", size_str.as_str()));
26        }
27        if let Some(s) = start_date {
28            params.push(("startDate", s));
29        }
30        if let Some(e) = end_date {
31            params.push(("endDate", e));
32        }
33        if let Some(s) = sub_aff_id {
34            sub_aff_id_str = s.to_string();
35            params.push(("subAffId", sub_aff_id_str.as_str()));
36        }
37        self.get("/v5/affiliate/affiliate-sub-list", &params).await
38    }
39
40    /// Get single direct client user info.
41    pub async fn get_affiliate_user_info(&self, uid: &str) -> Result<GetAffiliateUserInfoResponse> {
42        let params = vec![("uid", uid)];
43        self.get("/v5/user/aff-customer-info", &params).await
44    }
45
46    /// Get affiliate user list.
47    #[allow(clippy::too_many_arguments)] // TODO(api-ergonomics): convert positional args to a typed `*Params` struct
48    pub async fn get_affiliate_user_list(
49        &self,
50        cursor: Option<&str>,
51        size: Option<i64>,
52        need_deposit: Option<bool>,
53        need30: Option<bool>,
54        need365: Option<bool>,
55        start_date: Option<&str>,
56        end_date: Option<&str>,
57    ) -> Result<GetAffiliateUserListResponse> {
58        let size_str;
59        let need_deposit_str;
60        let need30_str;
61        let need365_str;
62        let mut params: Vec<(&str, &str)> = vec![];
63        if let Some(c) = cursor {
64            params.push(("cursor", c));
65        }
66        if let Some(s) = size {
67            size_str = s.to_string();
68            params.push(("size", size_str.as_str()));
69        }
70        if let Some(n) = need_deposit {
71            need_deposit_str = n.to_string();
72            params.push(("needDeposit", need_deposit_str.as_str()));
73        }
74        if let Some(n) = need30 {
75            need30_str = n.to_string();
76            params.push(("need30", need30_str.as_str()));
77        }
78        if let Some(n) = need365 {
79            need365_str = n.to_string();
80            params.push(("need365", need365_str.as_str()));
81        }
82        if let Some(s) = start_date {
83            params.push(("startDate", s));
84        }
85        if let Some(e) = end_date {
86            params.push(("endDate", e));
87        }
88        self.get("/v5/affiliate/aff-user-list", &params).await
89    }
90
91    /// Create Sub API Key.
92    pub async fn create_sub_api_key(
93        &self,
94        params: CreateSubApiKeyParams,
95    ) -> Result<CreateSubApiKeyResponse> {
96        self.post("/v5/user/create-sub-api", &params).await
97    }
98
99    /// Create Sub UID.
100    pub async fn create_sub_member(
101        &self,
102        params: CreateSubMemberParams,
103    ) -> Result<CreateSubMemberResponse> {
104        self.post("/v5/user/create-sub-member", &params).await
105    }
106
107    /// Delete Master API Key.
108    pub async fn delete_api_key(&self, params: DeleteApiKeyParams) -> Result<DeleteApiKeyResponse> {
109        self.post("/v5/user/delete-api", &params).await
110    }
111
112    /// Delete Sub-account API Key.
113    pub async fn delete_sub_api_key(
114        &self,
115        params: DeleteSubApiKeyParams,
116    ) -> Result<DeleteSubApiKeyResponse> {
117        self.post("/v5/user/delete-sub-api", &params).await
118    }
119
120    /// Delete Sub-account.
121    pub async fn delete_sub_member_v5(
122        &self,
123        params: DeleteSubMemberV5Params,
124    ) -> Result<DeleteSubMemberV5Response> {
125        self.post("/v5/user/del-submember", &params).await
126    }
127
128    /// Freeze/Unfreeze Sub UID.
129    pub async fn frozen_sub_member(
130        &self,
131        params: FrozenSubMemberParams,
132    ) -> Result<FrozenSubMemberResponse> {
133        self.post("/v5/user/frozen-sub-member", &params).await
134    }
135
136    /// Get Member Account Type.
137    // FIXME(typed-signature): falls back to `serde_json::Value` because the
138    // OpenAPI spec referenced a response/request type that gen-sdk-rust could
139    // not auto-resolve. Replace with a typed struct in a follow-up PR.
140    pub async fn get_member_account_type(
141        &self,
142        member_ids: Option<&str>,
143    ) -> Result<serde_json::Value> {
144        let mut params: Vec<(&str, &str)> = vec![];
145        if let Some(m) = member_ids {
146            params.push(("memberIds", m));
147        }
148        self.get("/v5/user/get-member-type", &params).await
149    }
150
151    /// List Sub-account API Keys.
152    ///
153    /// See: https://bybit-exchange.github.io/docs/v5/user/list-sub-apikeys
154    pub async fn list_sub_api_keys_v5(
155        &self,
156        sub_member_id: i64,
157        limit: Option<i64>,
158        cursor: Option<&str>,
159    ) -> Result<ListSubApiKeysV5Response> {
160        let sub_member_id_str = sub_member_id.to_string();
161        let limit_str;
162        let mut params: Vec<(&str, &str)> =
163            vec![("subMemberId", sub_member_id_str.as_str())];
164        if let Some(l) = limit {
165            limit_str = l.to_string();
166            params.push(("limit", limit_str.as_str()));
167        }
168        if let Some(c) = cursor {
169            params.push(("cursor", c));
170        }
171        self.get("/v5/user/sub-apikeys", &params).await
172    }
173
174    /// Get API Key Information.
175    pub async fn query_api_key(&self) -> Result<QueryApiKeyResponse> {
176        self.get("/v5/user/query-api", &[]).await
177    }
178
179    /// Query Escrow Sub-accounts (Fund Management).
180    pub async fn query_escrow_sub_members_v5(
181        &self,
182        next_cursor: Option<i64>,
183        page_size: Option<i64>,
184    ) -> Result<QueryEscrowSubMembersV5Response> {
185        let next_cursor_str;
186        let page_size_str;
187        let mut params: Vec<(&str, &str)> = vec![];
188        if let Some(n) = next_cursor {
189            next_cursor_str = n.to_string();
190            params.push(("nextCursor", next_cursor_str.as_str()));
191        }
192        if let Some(p) = page_size {
193            page_size_str = p.to_string();
194            params.push(("pageSize", page_size_str.as_str()));
195        }
196        self.get("/v5/user/escrow_sub_members", &params).await
197    }
198
199    /// Query Referrals.
200    pub async fn query_referrals(
201        &self,
202        cursor: Option<&str>,
203        size: Option<i64>,
204        status: Option<&str>,
205    ) -> Result<QueryReferralsResponse> {
206        let size_str;
207        let mut params: Vec<(&str, &str)> = vec![];
208        if let Some(c) = cursor {
209            params.push(("cursor", c));
210        }
211        if let Some(s) = size {
212            size_str = s.to_string();
213            params.push(("size", size_str.as_str()));
214        }
215        if let Some(s) = status {
216            params.push(("status", s));
217        }
218        self.get("/v5/user/invitation/referrals", &params).await
219    }
220
221    /// Query Sub UID List.
222    pub async fn query_sub_members(&self) -> Result<QuerySubMembersResponse> {
223        self.get("/v5/user/query-sub-members", &[]).await
224    }
225
226    /// Query Sub-accounts List.
227    pub async fn query_sub_members_v5(
228        &self,
229        page_size: Option<i64>,
230        next_cursor: Option<i64>,
231    ) -> Result<QuerySubMembersV5Response> {
232        let page_size_str;
233        let next_cursor_str;
234        let mut params: Vec<(&str, &str)> = vec![];
235        if let Some(p) = page_size {
236            page_size_str = p.to_string();
237            params.push(("pageSize", page_size_str.as_str()));
238        }
239        if let Some(n) = next_cursor {
240            next_cursor_str = n.to_string();
241            params.push(("nextCursor", next_cursor_str.as_str()));
242        }
243        self.get("/v5/user/submembers", &params).await
244    }
245
246    /// Sign Agreement.
247    pub async fn sign_agreement(
248        &self,
249        params: SignAgreementParams,
250    ) -> Result<SignAgreementResponse> {
251        self.post("/v5/user/agreement", &params).await
252    }
253
254    /// Modify Master API Key.
255    pub async fn update_api_key(&self, params: UpdateApiKeyParams) -> Result<UpdateApiKeyResponse> {
256        self.post("/v5/user/update-api", &params).await
257    }
258
259    /// Modify Sub-account API Key.
260    pub async fn update_sub_api_key(
261        &self,
262        params: UpdateSubApiKeyParams,
263    ) -> Result<UpdateSubApiKeyResponse> {
264        self.post("/v5/user/update-sub-api", &params).await
265    }
266}