1use std::sync::Arc;
12
13use async_trait::async_trait;
14#[cfg(feature = "mockall")]
15use mockall::automock;
16use reqwest;
17use serde::{Deserialize, Serialize, de::Error as _};
18
19use super::{Error, configuration};
20use crate::{
21 apis::{AuthRequired, ContentType, ResponseContent},
22 models,
23};
24
25#[cfg_attr(feature = "mockall", automock)]
26#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
27#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
28pub trait OrganizationBillingApi: Send + Sync {
29 async fn change_plan_subscription_frequency<'a>(
31 &self,
32 organization_id: uuid::Uuid,
33 change_plan_frequency_request: Option<models::ChangePlanFrequencyRequest>,
34 ) -> Result<(), Error<ChangePlanSubscriptionFrequencyError>>;
35
36 async fn get_billing<'a>(
38 &self,
39 organization_id: uuid::Uuid,
40 ) -> Result<(), Error<GetBillingError>>;
41
42 async fn get_history<'a>(
44 &self,
45 organization_id: uuid::Uuid,
46 ) -> Result<(), Error<GetHistoryError>>;
47
48 async fn get_invoices<'a>(
50 &self,
51 organization_id: uuid::Uuid,
52 status: Option<&'a str>,
53 start_after: Option<&'a str>,
54 ) -> Result<(), Error<GetInvoicesError>>;
55
56 async fn get_transactions<'a>(
58 &self,
59 organization_id: uuid::Uuid,
60 start_after: Option<String>,
61 ) -> Result<(), Error<GetTransactionsError>>;
62
63 async fn setup_business_unit<'a>(
65 &self,
66 organization_id: uuid::Uuid,
67 setup_business_unit_request_body: Option<models::SetupBusinessUnitRequestBody>,
68 ) -> Result<(), Error<SetupBusinessUnitError>>;
69}
70
71pub struct OrganizationBillingApiClient {
72 configuration: Arc<configuration::Configuration>,
73}
74
75impl OrganizationBillingApiClient {
76 pub fn new(configuration: Arc<configuration::Configuration>) -> Self {
77 Self { configuration }
78 }
79}
80
81#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
82#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
83impl OrganizationBillingApi for OrganizationBillingApiClient {
84 async fn change_plan_subscription_frequency<'a>(
85 &self,
86 organization_id: uuid::Uuid,
87 change_plan_frequency_request: Option<models::ChangePlanFrequencyRequest>,
88 ) -> Result<(), Error<ChangePlanSubscriptionFrequencyError>> {
89 let local_var_configuration = &self.configuration;
90
91 let local_var_client = &local_var_configuration.client;
92
93 let local_var_uri_str = format!(
94 "{}/organizations/{organizationId}/billing/change-frequency",
95 local_var_configuration.base_path,
96 organizationId = organization_id
97 );
98 let mut local_var_req_builder =
99 local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
100
101 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
102 local_var_req_builder = local_var_req_builder.json(&change_plan_frequency_request);
103
104 bitwarden_api_base::process_with_empty_response(local_var_req_builder).await
105 }
106
107 async fn get_billing<'a>(
108 &self,
109 organization_id: uuid::Uuid,
110 ) -> Result<(), Error<GetBillingError>> {
111 let local_var_configuration = &self.configuration;
112
113 let local_var_client = &local_var_configuration.client;
114
115 let local_var_uri_str = format!(
116 "{}/organizations/{organizationId}/billing",
117 local_var_configuration.base_path,
118 organizationId = organization_id
119 );
120 let mut local_var_req_builder =
121 local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
122
123 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
124
125 bitwarden_api_base::process_with_empty_response(local_var_req_builder).await
126 }
127
128 async fn get_history<'a>(
129 &self,
130 organization_id: uuid::Uuid,
131 ) -> Result<(), Error<GetHistoryError>> {
132 let local_var_configuration = &self.configuration;
133
134 let local_var_client = &local_var_configuration.client;
135
136 let local_var_uri_str = format!(
137 "{}/organizations/{organizationId}/billing/history",
138 local_var_configuration.base_path,
139 organizationId = organization_id
140 );
141 let mut local_var_req_builder =
142 local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
143
144 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
145
146 bitwarden_api_base::process_with_empty_response(local_var_req_builder).await
147 }
148
149 async fn get_invoices<'a>(
150 &self,
151 organization_id: uuid::Uuid,
152 status: Option<&'a str>,
153 start_after: Option<&'a str>,
154 ) -> Result<(), Error<GetInvoicesError>> {
155 let local_var_configuration = &self.configuration;
156
157 let local_var_client = &local_var_configuration.client;
158
159 let local_var_uri_str = format!(
160 "{}/organizations/{organizationId}/billing/invoices",
161 local_var_configuration.base_path,
162 organizationId = organization_id
163 );
164 let mut local_var_req_builder =
165 local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
166
167 if let Some(ref param_value) = status {
168 local_var_req_builder =
169 local_var_req_builder.query(&[("status", ¶m_value.to_string())]);
170 }
171 if let Some(ref param_value) = start_after {
172 local_var_req_builder =
173 local_var_req_builder.query(&[("startAfter", ¶m_value.to_string())]);
174 }
175 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
176
177 bitwarden_api_base::process_with_empty_response(local_var_req_builder).await
178 }
179
180 async fn get_transactions<'a>(
181 &self,
182 organization_id: uuid::Uuid,
183 start_after: Option<String>,
184 ) -> Result<(), Error<GetTransactionsError>> {
185 let local_var_configuration = &self.configuration;
186
187 let local_var_client = &local_var_configuration.client;
188
189 let local_var_uri_str = format!(
190 "{}/organizations/{organizationId}/billing/transactions",
191 local_var_configuration.base_path,
192 organizationId = organization_id
193 );
194 let mut local_var_req_builder =
195 local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
196
197 if let Some(ref param_value) = start_after {
198 local_var_req_builder =
199 local_var_req_builder.query(&[("startAfter", ¶m_value.to_string())]);
200 }
201 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
202
203 bitwarden_api_base::process_with_empty_response(local_var_req_builder).await
204 }
205
206 async fn setup_business_unit<'a>(
207 &self,
208 organization_id: uuid::Uuid,
209 setup_business_unit_request_body: Option<models::SetupBusinessUnitRequestBody>,
210 ) -> Result<(), Error<SetupBusinessUnitError>> {
211 let local_var_configuration = &self.configuration;
212
213 let local_var_client = &local_var_configuration.client;
214
215 let local_var_uri_str = format!(
216 "{}/organizations/{organizationId}/billing/setup-business-unit",
217 local_var_configuration.base_path,
218 organizationId = organization_id
219 );
220 let mut local_var_req_builder =
221 local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
222
223 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
224 local_var_req_builder = local_var_req_builder.json(&setup_business_unit_request_body);
225
226 bitwarden_api_base::process_with_empty_response(local_var_req_builder).await
227 }
228}
229
230#[derive(Debug, Clone, Serialize, Deserialize)]
232#[serde(untagged)]
233pub enum ChangePlanSubscriptionFrequencyError {
234 UnknownValue(serde_json::Value),
235}
236#[derive(Debug, Clone, Serialize, Deserialize)]
238#[serde(untagged)]
239pub enum GetBillingError {
240 UnknownValue(serde_json::Value),
241}
242#[derive(Debug, Clone, Serialize, Deserialize)]
244#[serde(untagged)]
245pub enum GetHistoryError {
246 UnknownValue(serde_json::Value),
247}
248#[derive(Debug, Clone, Serialize, Deserialize)]
250#[serde(untagged)]
251pub enum GetInvoicesError {
252 UnknownValue(serde_json::Value),
253}
254#[derive(Debug, Clone, Serialize, Deserialize)]
256#[serde(untagged)]
257pub enum GetTransactionsError {
258 UnknownValue(serde_json::Value),
259}
260#[derive(Debug, Clone, Serialize, Deserialize)]
262#[serde(untagged)]
263pub enum SetupBusinessUnitError {
264 UnknownValue(serde_json::Value),
265}