Skip to main content

fireblocks_sdk/apis/
mod.rs

1use std::{error, fmt};
2
3#[derive(Debug, Clone)]
4pub struct ResponseContent<T> {
5    pub status: reqwest::StatusCode,
6    pub content: String,
7    pub entity: Option<T>,
8}
9
10#[derive(Debug)]
11pub enum Error<T> {
12    Reqwest(reqwest::Error),
13    ReqwestMiddleware(reqwest_middleware::Error),
14    Serde(serde_json::Error),
15    Io(std::io::Error),
16    ResponseError(ResponseContent<T>),
17}
18
19impl<T> fmt::Display for Error<T> {
20    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
21        let (module, e) = match self {
22            Error::Reqwest(e) => ("reqwest", e.to_string()),
23            Error::ReqwestMiddleware(e) => ("reqwest-middleware", e.to_string()),
24            Error::Serde(e) => ("serde", e.to_string()),
25            Error::Io(e) => ("IO", e.to_string()),
26            Error::ResponseError(e) => ("response", format!("status code {}", e.status)),
27        };
28        write!(f, "error in {}: {}", module, e)
29    }
30}
31
32impl<T: fmt::Debug> error::Error for Error<T> {
33    fn source(&self) -> Option<&(dyn error::Error + 'static)> {
34        Some(match self {
35            Error::Reqwest(e) => e,
36            Error::ReqwestMiddleware(e) => e,
37            Error::Serde(e) => e,
38            Error::Io(e) => e,
39            Error::ResponseError(_) => return None,
40        })
41    }
42}
43
44impl<T> From<reqwest::Error> for Error<T> {
45    fn from(e: reqwest::Error) -> Self {
46        Error::Reqwest(e)
47    }
48}
49
50impl<T> From<reqwest_middleware::Error> for Error<T> {
51    fn from(e: reqwest_middleware::Error) -> Self {
52        Error::ReqwestMiddleware(e)
53    }
54}
55
56impl<T> From<serde_json::Error> for Error<T> {
57    fn from(e: serde_json::Error) -> Self {
58        Error::Serde(e)
59    }
60}
61
62impl<T> From<std::io::Error> for Error<T> {
63    fn from(e: std::io::Error) -> Self {
64        Error::Io(e)
65    }
66}
67
68pub fn urlencode<T: AsRef<str>>(s: T) -> String {
69    ::url::form_urlencoded::byte_serialize(s.as_ref().as_bytes()).collect()
70}
71
72pub fn parse_deep_object(prefix: &str, value: &serde_json::Value) -> Vec<(String, String)> {
73    if let serde_json::Value::Object(object) = value {
74        let mut params = vec![];
75
76        for (key, value) in object {
77            match value {
78                serde_json::Value::Object(_) => params.append(&mut parse_deep_object(
79                    &format!("{}[{}]", prefix, key),
80                    value,
81                )),
82                serde_json::Value::Array(array) => {
83                    for (i, value) in array.iter().enumerate() {
84                        params.append(&mut parse_deep_object(
85                            &format!("{}[{}][{}]", prefix, key, i),
86                            value,
87                        ));
88                    }
89                }
90                serde_json::Value::String(s) => {
91                    params.push((format!("{}[{}]", prefix, key), s.clone()))
92                }
93                _ => params.push((format!("{}[{}]", prefix, key), value.to_string())),
94            }
95        }
96
97        return params;
98    }
99
100    unimplemented!("Only objects are supported with style=deepObject")
101}
102
103/// Internal use only
104/// A content type supported by this client.
105#[allow(dead_code)]
106enum ContentType {
107    Json,
108    Text,
109    Unsupported(String),
110}
111
112impl From<&str> for ContentType {
113    fn from(content_type: &str) -> Self {
114        if content_type.starts_with("application") && content_type.contains("json") {
115            return Self::Json;
116        } else if content_type.starts_with("text/plain") {
117            return Self::Text;
118        } else {
119            return Self::Unsupported(content_type.to_string());
120        }
121    }
122}
123
124pub mod approval_requests_api;
125pub mod blockchains_assets_api;
126pub mod compliance_api;
127pub mod connected_accounts_beta_api;
128pub mod contract_interactions_api;
129pub mod contract_templates_api;
130pub mod d_app_connections_api;
131pub mod deployed_contracts_api;
132pub mod exchange_accounts_api;
133pub mod fiat_accounts_api;
134pub mod fireblocks_network_api;
135pub mod gas_station_api;
136pub mod job_management_api;
137pub mod key_link_api;
138pub mod keys_beta_api;
139pub mod nfts_api;
140pub mod off_exchange_api;
141pub mod payments_payout_api;
142pub mod policy_editor_beta_api;
143pub mod policy_editor_v2_beta_api;
144pub mod smart_transfers_api;
145pub mod staking_api;
146pub mod tags_api;
147pub mod tokenization_api;
148pub mod trading_beta_api;
149pub mod transactions_api;
150pub mod vaults_api;
151pub mod webhooks_api;
152pub mod webhooks_v2_api;
153pub mod whitelisted_contracts_api;
154pub mod whitelisted_external_wallets_api;
155pub mod whitelisted_internal_wallets_api;
156pub mod workspace_management_api;
157
158pub mod configuration;
159
160use std::sync::Arc;
161
162pub trait Api {
163    fn approval_requests_api(&self) -> &dyn approval_requests_api::ApprovalRequestsApi;
164    fn blockchains_assets_api(&self) -> &dyn blockchains_assets_api::BlockchainsAssetsApi;
165    fn compliance_api(&self) -> &dyn compliance_api::ComplianceApi;
166    fn connected_accounts_beta_api(
167        &self,
168    ) -> &dyn connected_accounts_beta_api::ConnectedAccountsBetaApi;
169    fn contract_interactions_api(&self) -> &dyn contract_interactions_api::ContractInteractionsApi;
170    fn contract_templates_api(&self) -> &dyn contract_templates_api::ContractTemplatesApi;
171    fn d_app_connections_api(&self) -> &dyn d_app_connections_api::DAppConnectionsApi;
172    fn deployed_contracts_api(&self) -> &dyn deployed_contracts_api::DeployedContractsApi;
173    fn exchange_accounts_api(&self) -> &dyn exchange_accounts_api::ExchangeAccountsApi;
174    fn fiat_accounts_api(&self) -> &dyn fiat_accounts_api::FiatAccountsApi;
175    fn fireblocks_network_api(&self) -> &dyn fireblocks_network_api::FireblocksNetworkApi;
176    fn gas_station_api(&self) -> &dyn gas_station_api::GasStationApi;
177    fn job_management_api(&self) -> &dyn job_management_api::JobManagementApi;
178    fn key_link_api(&self) -> &dyn key_link_api::KeyLinkApi;
179    fn keys_beta_api(&self) -> &dyn keys_beta_api::KeysBetaApi;
180    fn nfts_api(&self) -> &dyn nfts_api::NftsApi;
181    fn off_exchange_api(&self) -> &dyn off_exchange_api::OffExchangeApi;
182    fn payments_payout_api(&self) -> &dyn payments_payout_api::PaymentsPayoutApi;
183    fn policy_editor_beta_api(&self) -> &dyn policy_editor_beta_api::PolicyEditorBetaApi;
184    fn policy_editor_v2_beta_api(&self) -> &dyn policy_editor_v2_beta_api::PolicyEditorV2BetaApi;
185    fn smart_transfers_api(&self) -> &dyn smart_transfers_api::SmartTransfersApi;
186    fn staking_api(&self) -> &dyn staking_api::StakingApi;
187    fn tags_api(&self) -> &dyn tags_api::TagsApi;
188    fn tokenization_api(&self) -> &dyn tokenization_api::TokenizationApi;
189    fn trading_beta_api(&self) -> &dyn trading_beta_api::TradingBetaApi;
190    fn transactions_api(&self) -> &dyn transactions_api::TransactionsApi;
191    fn vaults_api(&self) -> &dyn vaults_api::VaultsApi;
192    fn webhooks_api(&self) -> &dyn webhooks_api::WebhooksApi;
193    fn webhooks_v2_api(&self) -> &dyn webhooks_v2_api::WebhooksV2Api;
194    fn whitelisted_contracts_api(&self) -> &dyn whitelisted_contracts_api::WhitelistedContractsApi;
195    fn whitelisted_external_wallets_api(
196        &self,
197    ) -> &dyn whitelisted_external_wallets_api::WhitelistedExternalWalletsApi;
198    fn whitelisted_internal_wallets_api(
199        &self,
200    ) -> &dyn whitelisted_internal_wallets_api::WhitelistedInternalWalletsApi;
201    fn workspace_management_api(&self) -> &dyn workspace_management_api::WorkspaceManagementApi;
202}
203
204pub struct ApiClient {
205    approval_requests_api: Box<dyn approval_requests_api::ApprovalRequestsApi>,
206    blockchains_assets_api: Box<dyn blockchains_assets_api::BlockchainsAssetsApi>,
207    compliance_api: Box<dyn compliance_api::ComplianceApi>,
208    connected_accounts_beta_api: Box<dyn connected_accounts_beta_api::ConnectedAccountsBetaApi>,
209    contract_interactions_api: Box<dyn contract_interactions_api::ContractInteractionsApi>,
210    contract_templates_api: Box<dyn contract_templates_api::ContractTemplatesApi>,
211    d_app_connections_api: Box<dyn d_app_connections_api::DAppConnectionsApi>,
212    deployed_contracts_api: Box<dyn deployed_contracts_api::DeployedContractsApi>,
213    exchange_accounts_api: Box<dyn exchange_accounts_api::ExchangeAccountsApi>,
214    fiat_accounts_api: Box<dyn fiat_accounts_api::FiatAccountsApi>,
215    fireblocks_network_api: Box<dyn fireblocks_network_api::FireblocksNetworkApi>,
216    gas_station_api: Box<dyn gas_station_api::GasStationApi>,
217    job_management_api: Box<dyn job_management_api::JobManagementApi>,
218    key_link_api: Box<dyn key_link_api::KeyLinkApi>,
219    keys_beta_api: Box<dyn keys_beta_api::KeysBetaApi>,
220    nfts_api: Box<dyn nfts_api::NftsApi>,
221    off_exchange_api: Box<dyn off_exchange_api::OffExchangeApi>,
222    payments_payout_api: Box<dyn payments_payout_api::PaymentsPayoutApi>,
223    policy_editor_beta_api: Box<dyn policy_editor_beta_api::PolicyEditorBetaApi>,
224    policy_editor_v2_beta_api: Box<dyn policy_editor_v2_beta_api::PolicyEditorV2BetaApi>,
225    smart_transfers_api: Box<dyn smart_transfers_api::SmartTransfersApi>,
226    staking_api: Box<dyn staking_api::StakingApi>,
227    tags_api: Box<dyn tags_api::TagsApi>,
228    tokenization_api: Box<dyn tokenization_api::TokenizationApi>,
229    trading_beta_api: Box<dyn trading_beta_api::TradingBetaApi>,
230    transactions_api: Box<dyn transactions_api::TransactionsApi>,
231    vaults_api: Box<dyn vaults_api::VaultsApi>,
232    webhooks_api: Box<dyn webhooks_api::WebhooksApi>,
233    webhooks_v2_api: Box<dyn webhooks_v2_api::WebhooksV2Api>,
234    whitelisted_contracts_api: Box<dyn whitelisted_contracts_api::WhitelistedContractsApi>,
235    whitelisted_external_wallets_api:
236        Box<dyn whitelisted_external_wallets_api::WhitelistedExternalWalletsApi>,
237    whitelisted_internal_wallets_api:
238        Box<dyn whitelisted_internal_wallets_api::WhitelistedInternalWalletsApi>,
239    workspace_management_api: Box<dyn workspace_management_api::WorkspaceManagementApi>,
240}
241
242impl ApiClient {
243    pub fn new(configuration: Arc<configuration::Configuration>) -> Self {
244        Self {
245            approval_requests_api: Box::new(approval_requests_api::ApprovalRequestsApiClient::new(
246                configuration.clone(),
247            )),
248            blockchains_assets_api: Box::new(
249                blockchains_assets_api::BlockchainsAssetsApiClient::new(configuration.clone()),
250            ),
251            compliance_api: Box::new(compliance_api::ComplianceApiClient::new(
252                configuration.clone(),
253            )),
254            connected_accounts_beta_api: Box::new(
255                connected_accounts_beta_api::ConnectedAccountsBetaApiClient::new(
256                    configuration.clone(),
257                ),
258            ),
259            contract_interactions_api: Box::new(
260                contract_interactions_api::ContractInteractionsApiClient::new(
261                    configuration.clone(),
262                ),
263            ),
264            contract_templates_api: Box::new(
265                contract_templates_api::ContractTemplatesApiClient::new(configuration.clone()),
266            ),
267            d_app_connections_api: Box::new(d_app_connections_api::DAppConnectionsApiClient::new(
268                configuration.clone(),
269            )),
270            deployed_contracts_api: Box::new(
271                deployed_contracts_api::DeployedContractsApiClient::new(configuration.clone()),
272            ),
273            exchange_accounts_api: Box::new(exchange_accounts_api::ExchangeAccountsApiClient::new(
274                configuration.clone(),
275            )),
276            fiat_accounts_api: Box::new(fiat_accounts_api::FiatAccountsApiClient::new(
277                configuration.clone(),
278            )),
279            fireblocks_network_api: Box::new(
280                fireblocks_network_api::FireblocksNetworkApiClient::new(configuration.clone()),
281            ),
282            gas_station_api: Box::new(gas_station_api::GasStationApiClient::new(
283                configuration.clone(),
284            )),
285            job_management_api: Box::new(job_management_api::JobManagementApiClient::new(
286                configuration.clone(),
287            )),
288            key_link_api: Box::new(key_link_api::KeyLinkApiClient::new(configuration.clone())),
289            keys_beta_api: Box::new(keys_beta_api::KeysBetaApiClient::new(configuration.clone())),
290            nfts_api: Box::new(nfts_api::NftsApiClient::new(configuration.clone())),
291            off_exchange_api: Box::new(off_exchange_api::OffExchangeApiClient::new(
292                configuration.clone(),
293            )),
294            payments_payout_api: Box::new(payments_payout_api::PaymentsPayoutApiClient::new(
295                configuration.clone(),
296            )),
297            policy_editor_beta_api: Box::new(
298                policy_editor_beta_api::PolicyEditorBetaApiClient::new(configuration.clone()),
299            ),
300            policy_editor_v2_beta_api: Box::new(
301                policy_editor_v2_beta_api::PolicyEditorV2BetaApiClient::new(configuration.clone()),
302            ),
303            smart_transfers_api: Box::new(smart_transfers_api::SmartTransfersApiClient::new(
304                configuration.clone(),
305            )),
306            staking_api: Box::new(staking_api::StakingApiClient::new(configuration.clone())),
307            tags_api: Box::new(tags_api::TagsApiClient::new(configuration.clone())),
308            tokenization_api: Box::new(tokenization_api::TokenizationApiClient::new(
309                configuration.clone(),
310            )),
311            trading_beta_api: Box::new(trading_beta_api::TradingBetaApiClient::new(
312                configuration.clone(),
313            )),
314            transactions_api: Box::new(transactions_api::TransactionsApiClient::new(
315                configuration.clone(),
316            )),
317            vaults_api: Box::new(vaults_api::VaultsApiClient::new(configuration.clone())),
318            webhooks_api: Box::new(webhooks_api::WebhooksApiClient::new(configuration.clone())),
319            webhooks_v2_api: Box::new(webhooks_v2_api::WebhooksV2ApiClient::new(
320                configuration.clone(),
321            )),
322            whitelisted_contracts_api: Box::new(
323                whitelisted_contracts_api::WhitelistedContractsApiClient::new(
324                    configuration.clone(),
325                ),
326            ),
327            whitelisted_external_wallets_api: Box::new(
328                whitelisted_external_wallets_api::WhitelistedExternalWalletsApiClient::new(
329                    configuration.clone(),
330                ),
331            ),
332            whitelisted_internal_wallets_api: Box::new(
333                whitelisted_internal_wallets_api::WhitelistedInternalWalletsApiClient::new(
334                    configuration.clone(),
335                ),
336            ),
337            workspace_management_api: Box::new(
338                workspace_management_api::WorkspaceManagementApiClient::new(configuration.clone()),
339            ),
340        }
341    }
342}
343
344impl Api for ApiClient {
345    fn approval_requests_api(&self) -> &dyn approval_requests_api::ApprovalRequestsApi {
346        self.approval_requests_api.as_ref()
347    }
348
349    fn blockchains_assets_api(&self) -> &dyn blockchains_assets_api::BlockchainsAssetsApi {
350        self.blockchains_assets_api.as_ref()
351    }
352
353    fn compliance_api(&self) -> &dyn compliance_api::ComplianceApi {
354        self.compliance_api.as_ref()
355    }
356
357    fn connected_accounts_beta_api(
358        &self,
359    ) -> &dyn connected_accounts_beta_api::ConnectedAccountsBetaApi {
360        self.connected_accounts_beta_api.as_ref()
361    }
362
363    fn contract_interactions_api(&self) -> &dyn contract_interactions_api::ContractInteractionsApi {
364        self.contract_interactions_api.as_ref()
365    }
366
367    fn contract_templates_api(&self) -> &dyn contract_templates_api::ContractTemplatesApi {
368        self.contract_templates_api.as_ref()
369    }
370
371    fn d_app_connections_api(&self) -> &dyn d_app_connections_api::DAppConnectionsApi {
372        self.d_app_connections_api.as_ref()
373    }
374
375    fn deployed_contracts_api(&self) -> &dyn deployed_contracts_api::DeployedContractsApi {
376        self.deployed_contracts_api.as_ref()
377    }
378
379    fn exchange_accounts_api(&self) -> &dyn exchange_accounts_api::ExchangeAccountsApi {
380        self.exchange_accounts_api.as_ref()
381    }
382
383    fn fiat_accounts_api(&self) -> &dyn fiat_accounts_api::FiatAccountsApi {
384        self.fiat_accounts_api.as_ref()
385    }
386
387    fn fireblocks_network_api(&self) -> &dyn fireblocks_network_api::FireblocksNetworkApi {
388        self.fireblocks_network_api.as_ref()
389    }
390
391    fn gas_station_api(&self) -> &dyn gas_station_api::GasStationApi {
392        self.gas_station_api.as_ref()
393    }
394
395    fn job_management_api(&self) -> &dyn job_management_api::JobManagementApi {
396        self.job_management_api.as_ref()
397    }
398
399    fn key_link_api(&self) -> &dyn key_link_api::KeyLinkApi {
400        self.key_link_api.as_ref()
401    }
402
403    fn keys_beta_api(&self) -> &dyn keys_beta_api::KeysBetaApi {
404        self.keys_beta_api.as_ref()
405    }
406
407    fn nfts_api(&self) -> &dyn nfts_api::NftsApi {
408        self.nfts_api.as_ref()
409    }
410
411    fn off_exchange_api(&self) -> &dyn off_exchange_api::OffExchangeApi {
412        self.off_exchange_api.as_ref()
413    }
414
415    fn payments_payout_api(&self) -> &dyn payments_payout_api::PaymentsPayoutApi {
416        self.payments_payout_api.as_ref()
417    }
418
419    fn policy_editor_beta_api(&self) -> &dyn policy_editor_beta_api::PolicyEditorBetaApi {
420        self.policy_editor_beta_api.as_ref()
421    }
422
423    fn policy_editor_v2_beta_api(&self) -> &dyn policy_editor_v2_beta_api::PolicyEditorV2BetaApi {
424        self.policy_editor_v2_beta_api.as_ref()
425    }
426
427    fn smart_transfers_api(&self) -> &dyn smart_transfers_api::SmartTransfersApi {
428        self.smart_transfers_api.as_ref()
429    }
430
431    fn staking_api(&self) -> &dyn staking_api::StakingApi {
432        self.staking_api.as_ref()
433    }
434
435    fn tags_api(&self) -> &dyn tags_api::TagsApi {
436        self.tags_api.as_ref()
437    }
438
439    fn tokenization_api(&self) -> &dyn tokenization_api::TokenizationApi {
440        self.tokenization_api.as_ref()
441    }
442
443    fn trading_beta_api(&self) -> &dyn trading_beta_api::TradingBetaApi {
444        self.trading_beta_api.as_ref()
445    }
446
447    fn transactions_api(&self) -> &dyn transactions_api::TransactionsApi {
448        self.transactions_api.as_ref()
449    }
450
451    fn vaults_api(&self) -> &dyn vaults_api::VaultsApi {
452        self.vaults_api.as_ref()
453    }
454
455    fn webhooks_api(&self) -> &dyn webhooks_api::WebhooksApi {
456        self.webhooks_api.as_ref()
457    }
458
459    fn webhooks_v2_api(&self) -> &dyn webhooks_v2_api::WebhooksV2Api {
460        self.webhooks_v2_api.as_ref()
461    }
462
463    fn whitelisted_contracts_api(&self) -> &dyn whitelisted_contracts_api::WhitelistedContractsApi {
464        self.whitelisted_contracts_api.as_ref()
465    }
466
467    fn whitelisted_external_wallets_api(
468        &self,
469    ) -> &dyn whitelisted_external_wallets_api::WhitelistedExternalWalletsApi {
470        self.whitelisted_external_wallets_api.as_ref()
471    }
472
473    fn whitelisted_internal_wallets_api(
474        &self,
475    ) -> &dyn whitelisted_internal_wallets_api::WhitelistedInternalWalletsApi {
476        self.whitelisted_internal_wallets_api.as_ref()
477    }
478
479    fn workspace_management_api(&self) -> &dyn workspace_management_api::WorkspaceManagementApi {
480        self.workspace_management_api.as_ref()
481    }
482}