Skip to main content

bitwarden_organization_invite_link/
invite_link_client.rs

1use std::sync::Arc;
2
3use bitwarden_core::{Client, FromClient, client::ApiConfigurations, key_management::KeySlotIds};
4use bitwarden_crypto::KeyStore;
5
6use crate::{InviteLinkAdminClient, InviteLinkUserClient};
7
8/// Client for organization invite link operations.
9///
10/// This is a thin entry point that exposes two focused sub-clients: [`InviteLinkAdminClient`] (via
11/// [`admin`](Self::admin)) for administrator CRUD operations, and [`InviteLinkUserClient`] (via
12/// [`user`](Self::user)) for invitee flows.
13#[bitwarden_ffi::wasm_object]
14#[derive(FromClient)]
15pub struct InviteLinkClient {
16    pub(crate) key_store: KeyStore<KeySlotIds>,
17    pub(crate) api_configurations: Arc<ApiConfigurations>,
18}
19
20#[bitwarden_ffi::wasm_export]
21impl InviteLinkClient {
22    /// Administrative (organization-key) invite link operations.
23    pub fn admin(&self) -> InviteLinkAdminClient {
24        InviteLinkAdminClient {
25            key_store: self.key_store.clone(),
26            api_configurations: self.api_configurations.clone(),
27        }
28    }
29
30    /// Invitee (user) invite link operations.
31    pub fn user(&self) -> InviteLinkUserClient {
32        InviteLinkUserClient {
33            key_store: self.key_store.clone(),
34            api_configurations: self.api_configurations.clone(),
35        }
36    }
37}
38
39/// Extension trait that exposes [`InviteLinkClient`] on [`Client`].
40pub trait InviteLinkClientExt {
41    /// Returns an [`InviteLinkClient`]
42    fn invite_link(&self) -> InviteLinkClient;
43}
44
45impl InviteLinkClientExt for Client {
46    fn invite_link(&self) -> InviteLinkClient {
47        InviteLinkClient::from_client(self)
48    }
49}