Skip to main content

bitwarden_api_identity/apis/
mod.rs

1// Reexport base types from bitwarden-api-base for backwards compatibility
2pub use bitwarden_api_base::*;
3
4pub mod accounts_api;
5pub mod info_api;
6pub mod sso_api;
7
8// Reexport Configuration type from bitwarden-api-base for backwards compatibility
9pub mod configuration {
10    pub use bitwarden_api_base::Configuration;
11}
12
13use std::sync::Arc;
14
15#[allow(clippy::large_enum_variant, private_interfaces)]
16pub enum ApiClient {
17    Real(ApiClientReal),
18    #[cfg(feature = "mockall")]
19    Mock(ApiClientMock),
20}
21
22struct ApiClientReal {
23    accounts_api: accounts_api::AccountsApiClient,
24    info_api: info_api::InfoApiClient,
25    sso_api: sso_api::SsoApiClient,
26}
27
28#[cfg(feature = "mockall")]
29pub struct ApiClientMock {
30    pub accounts_api: accounts_api::MockAccountsApi,
31    pub info_api: info_api::MockInfoApi,
32    pub sso_api: sso_api::MockSsoApi,
33}
34
35impl ApiClient {
36    pub fn new(configuration: &Arc<bitwarden_api_base::Configuration>) -> Self {
37        Self::Real(ApiClientReal {
38            accounts_api: accounts_api::AccountsApiClient::new(configuration.clone()),
39            info_api: info_api::InfoApiClient::new(configuration.clone()),
40            sso_api: sso_api::SsoApiClient::new(configuration.clone()),
41        })
42    }
43
44    #[cfg(feature = "mockall")]
45    pub fn new_mocked(func: impl FnOnce(&mut ApiClientMock)) -> Self {
46        let mut mock = ApiClientMock {
47            accounts_api: accounts_api::MockAccountsApi::new(),
48            info_api: info_api::MockInfoApi::new(),
49            sso_api: sso_api::MockSsoApi::new(),
50        };
51        func(&mut mock);
52        Self::Mock(mock)
53    }
54}
55
56impl ApiClient {
57    pub fn accounts_api(&self) -> &dyn accounts_api::AccountsApi {
58        match self {
59            ApiClient::Real(real) => &real.accounts_api,
60            #[cfg(feature = "mockall")]
61            ApiClient::Mock(mock) => &mock.accounts_api,
62        }
63    }
64    pub fn info_api(&self) -> &dyn info_api::InfoApi {
65        match self {
66            ApiClient::Real(real) => &real.info_api,
67            #[cfg(feature = "mockall")]
68            ApiClient::Mock(mock) => &mock.info_api,
69        }
70    }
71    pub fn sso_api(&self) -> &dyn sso_api::SsoApi {
72        match self {
73            ApiClient::Real(real) => &real.sso_api,
74            #[cfg(feature = "mockall")]
75            ApiClient::Mock(mock) => &mock.sso_api,
76        }
77    }
78}