1#[allow(unused_imports)]
4use super::types::*;
5
6#[derive(Clone)]
9pub struct DelegatedExchangesClient {
10 client: crate::client::Client,
11}
12
13impl DelegatedExchangesClient {
14 pub fn new(client: crate::client::Client) -> Self {
15 DelegatedExchangesClient { client }
16 }
17
18 pub async fn get_exchange(
20 &self,
21 exchange_id: String,
22 ) -> Result<GetExchangeResponse, crate::error::Error> {
23 let path = format!("/exchanges/{}", urlencoding::encode(&exchange_id));
24 self.client
25 .request::<GetExchangeResponse>(reqwest::Method::GET, &path, None, false)
26 .await
27 }
28
29 pub async fn delete_exchange_init(
32 &self,
33 exchange_id: String,
34 ) -> Result<crate::signer::UserActionChallenge, crate::error::Error> {
35 let path = format!("/exchanges/{}", urlencoding::encode(&exchange_id));
36 self.client
37 .create_user_action_challenge(reqwest::Method::DELETE, &path, None)
38 .await
39 }
40
41 pub async fn delete_exchange_complete(
44 &self,
45 exchange_id: String,
46 challenge_identifier: String,
47 assertion: crate::signer::CredentialAssertion,
48 ) -> Result<DeleteExchangeResponse, crate::error::Error> {
49 let path = format!("/exchanges/{}", urlencoding::encode(&exchange_id));
50 let user_action = self
51 .client
52 .complete_user_action_signing(challenge_identifier, &assertion)
53 .await?;
54 self.client
55 .request_with_user_action::<DeleteExchangeResponse>(
56 reqwest::Method::DELETE,
57 &path,
58 None,
59 &user_action,
60 )
61 .await
62 }
63
64 pub async fn list_exchanges(
66 &self,
67 query: Option<ListExchangesQuery>,
68 ) -> Result<ListExchangesResponse, crate::error::Error> {
69 let mut path = String::from("/exchanges");
70 if let Some(query) = &query {
71 let mut q: Vec<String> = Vec::new();
72 if let Some(v) = &query.limit {
73 q.push(format!("limit={}", urlencoding::encode(&v.to_string())));
74 }
75 if let Some(v) = &query.pagination_token {
76 q.push(format!(
77 "paginationToken={}",
78 urlencoding::encode(&v.to_string())
79 ));
80 }
81 if !q.is_empty() {
82 path.push('?');
83 path.push_str(&q.join("&"));
84 }
85 }
86 self.client
87 .request::<ListExchangesResponse>(reqwest::Method::GET, &path, None, false)
88 .await
89 }
90
91 pub async fn create_exchange_init(
94 &self,
95 body: CreateExchangeRequest,
96 ) -> Result<crate::signer::UserActionChallenge, crate::error::Error> {
97 let path = String::from("/exchanges");
98 let body = serde_json::to_value(&body)?;
99 self.client
100 .create_user_action_challenge(reqwest::Method::POST, &path, Some(&body))
101 .await
102 }
103
104 pub async fn create_exchange_complete(
107 &self,
108 body: CreateExchangeRequest,
109 challenge_identifier: String,
110 assertion: crate::signer::CredentialAssertion,
111 ) -> Result<CreateExchangeResponse, crate::error::Error> {
112 let path = String::from("/exchanges");
113 let body = serde_json::to_value(&body)?;
114 let user_action = self
115 .client
116 .complete_user_action_signing(challenge_identifier, &assertion)
117 .await?;
118 self.client
119 .request_with_user_action::<CreateExchangeResponse>(
120 reqwest::Method::POST,
121 &path,
122 Some(&body),
123 &user_action,
124 )
125 .await
126 }
127
128 pub async fn list_accounts(
130 &self,
131 exchange_id: String,
132 query: Option<ListAccountsQuery>,
133 ) -> Result<ListAccountsResponse, crate::error::Error> {
134 let mut path = format!("/exchanges/{}/accounts", urlencoding::encode(&exchange_id));
135 if let Some(query) = &query {
136 let mut q: Vec<String> = Vec::new();
137 if let Some(v) = &query.limit {
138 q.push(format!("limit={}", urlencoding::encode(&v.to_string())));
139 }
140 if let Some(v) = &query.pagination_token {
141 q.push(format!(
142 "paginationToken={}",
143 urlencoding::encode(&v.to_string())
144 ));
145 }
146 if !q.is_empty() {
147 path.push('?');
148 path.push_str(&q.join("&"));
149 }
150 }
151 self.client
152 .request::<ListAccountsResponse>(reqwest::Method::GET, &path, None, false)
153 .await
154 }
155
156 pub async fn list_account_assets(
158 &self,
159 exchange_id: String,
160 account_id: String,
161 query: Option<ListAccountAssetsQuery>,
162 ) -> Result<ListAccountAssetsResponse, crate::error::Error> {
163 let mut path = format!(
164 "/exchanges/{}/accounts/{}/assets",
165 urlencoding::encode(&exchange_id),
166 urlencoding::encode(&account_id)
167 );
168 if let Some(query) = &query {
169 let mut q: Vec<String> = Vec::new();
170 if let Some(v) = &query.limit {
171 q.push(format!("limit={}", urlencoding::encode(&v.to_string())));
172 }
173 if let Some(v) = &query.pagination_token {
174 q.push(format!(
175 "paginationToken={}",
176 urlencoding::encode(&v.to_string())
177 ));
178 }
179 if !q.is_empty() {
180 path.push('?');
181 path.push_str(&q.join("&"));
182 }
183 }
184 self.client
185 .request::<ListAccountAssetsResponse>(reqwest::Method::GET, &path, None, false)
186 .await
187 }
188
189 pub async fn list_asset_withdrawal_networks(
191 &self,
192 exchange_id: String,
193 account_id: String,
194 asset: String,
195 ) -> Result<serde_json::Value, crate::error::Error> {
196 let path = format!(
197 "/exchanges/{}/accounts/{}/assets/{}/withdrawal-networks",
198 urlencoding::encode(&exchange_id),
199 urlencoding::encode(&account_id),
200 urlencoding::encode(&asset)
201 );
202 self.client
203 .request::<serde_json::Value>(reqwest::Method::GET, &path, None, false)
204 .await
205 }
206
207 pub async fn create_exchange_deposit_init(
210 &self,
211 exchange_id: String,
212 account_id: String,
213 body: CreateExchangeDepositRequest,
214 ) -> Result<crate::signer::UserActionChallenge, crate::error::Error> {
215 let path = format!(
216 "/exchanges/{}/accounts/{}/deposits",
217 urlencoding::encode(&exchange_id),
218 urlencoding::encode(&account_id)
219 );
220 let body = serde_json::to_value(&body)?;
221 self.client
222 .create_user_action_challenge(reqwest::Method::POST, &path, Some(&body))
223 .await
224 }
225
226 pub async fn create_exchange_deposit_complete(
229 &self,
230 exchange_id: String,
231 account_id: String,
232 body: CreateExchangeDepositRequest,
233 challenge_identifier: String,
234 assertion: crate::signer::CredentialAssertion,
235 ) -> Result<CreateExchangeDepositResponse, crate::error::Error> {
236 let path = format!(
237 "/exchanges/{}/accounts/{}/deposits",
238 urlencoding::encode(&exchange_id),
239 urlencoding::encode(&account_id)
240 );
241 let body = serde_json::to_value(&body)?;
242 let user_action = self
243 .client
244 .complete_user_action_signing(challenge_identifier, &assertion)
245 .await?;
246 self.client
247 .request_with_user_action::<CreateExchangeDepositResponse>(
248 reqwest::Method::POST,
249 &path,
250 Some(&body),
251 &user_action,
252 )
253 .await
254 }
255
256 pub async fn create_exchange_withdrawal_init(
259 &self,
260 exchange_id: String,
261 account_id: String,
262 body: CreateExchangeWithdrawalRequest,
263 ) -> Result<crate::signer::UserActionChallenge, crate::error::Error> {
264 let path = format!(
265 "/exchanges/{}/accounts/{}/withdrawals",
266 urlencoding::encode(&exchange_id),
267 urlencoding::encode(&account_id)
268 );
269 let body = serde_json::to_value(&body)?;
270 self.client
271 .create_user_action_challenge(reqwest::Method::POST, &path, Some(&body))
272 .await
273 }
274
275 pub async fn create_exchange_withdrawal_complete(
278 &self,
279 exchange_id: String,
280 account_id: String,
281 body: CreateExchangeWithdrawalRequest,
282 challenge_identifier: String,
283 assertion: crate::signer::CredentialAssertion,
284 ) -> Result<CreateExchangeWithdrawalResponse, crate::error::Error> {
285 let path = format!(
286 "/exchanges/{}/accounts/{}/withdrawals",
287 urlencoding::encode(&exchange_id),
288 urlencoding::encode(&account_id)
289 );
290 let body = serde_json::to_value(&body)?;
291 let user_action = self
292 .client
293 .complete_user_action_signing(challenge_identifier, &assertion)
294 .await?;
295 self.client
296 .request_with_user_action::<CreateExchangeWithdrawalResponse>(
297 reqwest::Method::POST,
298 &path,
299 Some(&body),
300 &user_action,
301 )
302 .await
303 }
304}