rain_sdk/api/
subtenants.rs

1//! Subtenants API
2//!
3//! This module provides functionality to manage subtenants.
4
5use crate::client::RainClient;
6use crate::error::Result;
7use crate::models::subtenants::*;
8use uuid::Uuid;
9
10impl RainClient {
11    /// Get all subtenants
12    ///
13    /// # Returns
14    ///
15    /// Returns a [`Vec<Subtenant>`] containing the list of subtenants.
16    ///
17    /// # Examples
18    ///
19    /// ```no_run
20    /// use rain_sdk::{RainClient, Config, Environment, AuthConfig};
21    ///
22    /// # #[cfg(feature = "async")]
23    /// # async fn example() -> Result<(), Box<dyn std::error::Error>> {
24    /// let config = Config::new(Environment::Dev);
25    /// let auth = AuthConfig::with_api_key("your-api-key".to_string());
26    /// let client = RainClient::new(config, auth)?;
27    ///
28    /// let subtenants = client.list_subtenants().await?;
29    /// println!("Found {} subtenants", subtenants.len());
30    /// # Ok(())
31    /// # }
32    /// ```
33    #[cfg(feature = "async")]
34    pub async fn list_subtenants(&self) -> Result<Vec<Subtenant>> {
35        let path = "/issuing/subtenants";
36        self.get(path).await
37    }
38
39    /// Create a subtenant
40    ///
41    /// # Arguments
42    ///
43    /// * `request` - The subtenant creation request
44    ///
45    /// # Returns
46    ///
47    /// Returns a [`Subtenant`] containing the created subtenant information.
48    ///
49    /// # Examples
50    ///
51    /// ```no_run
52    /// use rain_sdk::{RainClient, Config, Environment, AuthConfig};
53    /// use rain_sdk::models::subtenants::CreateSubtenantRequest;
54    ///
55    /// # #[cfg(feature = "async")]
56    /// # async fn example() -> Result<(), Box<dyn std::error::Error>> {
57    /// let config = Config::new(Environment::Dev);
58    /// let auth = AuthConfig::with_api_key("your-api-key".to_string());
59    /// let client = RainClient::new(config, auth)?;
60    ///
61    /// let request = CreateSubtenantRequest {
62    ///     name: Some("My Subtenant".to_string()),
63    /// };
64    /// let subtenant = client.create_subtenant(&request).await?;
65    /// # Ok(())
66    /// # }
67    /// ```
68    #[cfg(feature = "async")]
69    pub async fn create_subtenant(&self, request: &CreateSubtenantRequest) -> Result<Subtenant> {
70        let path = "/issuing/subtenants";
71        self.post(path, request).await
72    }
73
74    /// Get a subtenant by its id
75    ///
76    /// # Arguments
77    ///
78    /// * `subtenant_id` - The unique identifier of the subtenant
79    ///
80    /// # Returns
81    ///
82    /// Returns a [`Subtenant`] containing the subtenant information.
83    #[cfg(feature = "async")]
84    pub async fn get_subtenant(&self, subtenant_id: &Uuid) -> Result<Subtenant> {
85        let path = format!("/issuing/subtenants/{subtenant_id}");
86        self.get(&path).await
87    }
88
89    /// Update a subtenant
90    ///
91    /// # Arguments
92    ///
93    /// * `subtenant_id` - The unique identifier of the subtenant
94    /// * `request` - The update request
95    ///
96    /// # Returns
97    ///
98    /// Returns success (204 No Content) with no response body.
99    #[cfg(feature = "async")]
100    pub async fn update_subtenant(
101        &self,
102        subtenant_id: &Uuid,
103        request: &UpdateSubtenantRequest,
104    ) -> Result<()> {
105        let path = format!("/issuing/subtenants/{subtenant_id}");
106        let _: serde_json::Value = self.patch(&path, request).await?;
107        Ok(())
108    }
109
110    // ============================================================================
111    // Blocking Methods
112    // ============================================================================
113
114    /// Get all subtenants (blocking)
115    #[cfg(feature = "sync")]
116    pub fn list_subtenants_blocking(&self) -> Result<Vec<Subtenant>> {
117        let path = "/issuing/subtenants";
118        self.get_blocking(path)
119    }
120
121    /// Create a subtenant (blocking)
122    #[cfg(feature = "sync")]
123    pub fn create_subtenant_blocking(&self, request: &CreateSubtenantRequest) -> Result<Subtenant> {
124        let path = "/issuing/subtenants";
125        self.post_blocking(path, request)
126    }
127
128    /// Get a subtenant by its id (blocking)
129    #[cfg(feature = "sync")]
130    pub fn get_subtenant_blocking(&self, subtenant_id: &Uuid) -> Result<Subtenant> {
131        let path = format!("/issuing/subtenants/{subtenant_id}");
132        self.get_blocking(&path)
133    }
134
135    /// Update a subtenant (blocking)
136    #[cfg(feature = "sync")]
137    pub fn update_subtenant_blocking(
138        &self,
139        subtenant_id: &Uuid,
140        request: &UpdateSubtenantRequest,
141    ) -> Result<()> {
142        let path = format!("/issuing/subtenants/{subtenant_id}");
143        let _: serde_json::Value = self.patch_blocking(&path, request)?;
144        Ok(())
145    }
146}