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}