Skip to main content

dfns_sdk_rust/exchanges/
delegated.rs

1// Code generated by rust-sdk-generator. DO NOT EDIT.
2
3#[allow(unused_imports)]
4use super::types::*;
5
6/// Delegated client for exchanges operations. Signed operations are split into
7/// init/complete pairs so the challenge can be signed on the user side.
8#[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    /// Retrieve the details of a specific exchange integration configuration.
19    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    /// Starts delegated signing for deleteExchange: returns the challenge to sign.
30    /// Pass the signed assertion to delete_exchange_complete with the same arguments.
31    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    /// Finishes delegated signing for deleteExchange: submits the signed challenge
42    /// and issues the request.
43    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    /// List all configured exchange integrations.
65    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    /// Starts delegated signing for createExchange: returns the challenge to sign.
92    /// Pass the signed assertion to create_exchange_complete with the same arguments.
93    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    /// Finishes delegated signing for createExchange: submits the signed challenge
105    /// and issues the request.
106    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    /// Get a list of accounts for a specific exchange.
129    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    /// Retrieve the list of assets for a specific account on a specific exchange.
157    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    /// Lists the networks to which the given asset can be withdrawn from an exchange account.
190    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    /// Starts delegated signing for createExchangeDeposit: returns the challenge to sign.
208    /// Pass the signed assertion to create_exchange_deposit_complete with the same arguments.
209    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    /// Finishes delegated signing for createExchangeDeposit: submits the signed challenge
227    /// and issues the request.
228    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    /// Starts delegated signing for createExchangeWithdrawal: returns the challenge to sign.
257    /// Pass the signed assertion to create_exchange_withdrawal_complete with the same arguments.
258    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    /// Finishes delegated signing for createExchangeWithdrawal: submits the signed challenge
276    /// and issues the request.
277    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}