dfns_sdk_rs/client/
api_client.rs1use crate::{
4 api::{
5 auth::client::AuthClient, exchanges::client::ExchangesClient,
6 networks::client::NetworksClient, permissions::client::PermissionsClient,
7 policies::client::PoliciesClient, signers::client::SignersClient,
8 staking::client::StakingClient, wallets::client::WalletsClient,
9 webhooks::client::WebhooksClient,
10 },
11 models::generic::{DfnsApiClientOptions, DfnsBaseApiOptions},
12 signer::CredentialSigner,
13};
14use std::sync::Arc;
15
16pub struct DfnsApiClient {
17 base_options: DfnsBaseApiOptions,
18 signer: Option<Arc<dyn CredentialSigner>>,
19}
20
21impl DfnsApiClient {
22 pub fn new(
23 base_options: DfnsBaseApiOptions,
24 signer: Option<Arc<dyn CredentialSigner>>,
25 ) -> Self {
26 Self {
27 base_options,
28 signer,
29 }
30 }
31
32 fn get_api_options(&self) -> DfnsApiClientOptions {
33 DfnsApiClientOptions {
34 base: self.base_options.clone(),
35 signer: self.signer.as_ref().map(|s| {
36 let cloned = Arc::clone(s);
37 Box::new(ClonedSigner(cloned)) as Box<dyn CredentialSigner>
38 }),
39 }
40 }
41
42 pub fn auth(&self) -> AuthClient {
43 AuthClient::new(self.get_api_options())
44 }
45
46 pub fn exchanges(&self) -> ExchangesClient {
47 ExchangesClient::new(self.get_api_options())
48 }
49
50 pub fn networks(&self) -> NetworksClient {
51 NetworksClient::new(self.get_api_options())
52 }
53
54 pub fn permissions(&self) -> PermissionsClient {
55 PermissionsClient::new(self.get_api_options())
56 }
57
58 pub fn policies(&self) -> PoliciesClient {
59 PoliciesClient::new(self.get_api_options())
60 }
61
62 pub fn staking(&self) -> StakingClient {
63 StakingClient::new(self.get_api_options())
64 }
65
66 pub fn signers(&self) -> SignersClient {
67 SignersClient::new(self.get_api_options())
68 }
69
70 pub fn wallets(&self) -> WalletsClient {
71 WalletsClient::new(self.get_api_options())
72 }
73
74 pub fn webhooks(&self) -> WebhooksClient {
75 WebhooksClient::new(self.get_api_options())
76 }
77}
78
79struct ClonedSigner(Arc<dyn CredentialSigner + Send + Sync>);
80
81#[async_trait::async_trait]
82impl CredentialSigner for ClonedSigner {
83 async fn sign(
84 &self,
85 challenge: crate::signer::UserActionChallenge,
86 ) -> Result<crate::signer::FirstFactorAssertion, crate::error::DfnsError> {
87 self.0.sign(challenge).await
88 }
89}