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_metadata<'a>(
58 &self,
59 organization_id: uuid::Uuid,
60 ) -> Result<(), Error<GetMetadataError>>;
61
62 async fn get_transactions<'a>(
64 &self,
65 organization_id: uuid::Uuid,
66 start_after: Option<String>,
67 ) -> Result<(), Error<GetTransactionsError>>;
68
69 async fn setup_business_unit<'a>(
71 &self,
72 organization_id: uuid::Uuid,
73 setup_business_unit_request_body: Option<models::SetupBusinessUnitRequestBody>,
74 ) -> Result<(), Error<SetupBusinessUnitError>>;
75}
76
77pub struct OrganizationBillingApiClient {
78 configuration: Arc<configuration::Configuration>,
79}
80
81impl OrganizationBillingApiClient {
82 pub fn new(configuration: Arc<configuration::Configuration>) -> Self {
83 Self { configuration }
84 }
85}
86
87#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
88#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
89impl OrganizationBillingApi for OrganizationBillingApiClient {
90 async fn change_plan_subscription_frequency<'a>(
91 &self,
92 organization_id: uuid::Uuid,
93 change_plan_frequency_request: Option<models::ChangePlanFrequencyRequest>,
94 ) -> Result<(), Error<ChangePlanSubscriptionFrequencyError>> {
95 let local_var_configuration = &self.configuration;
96
97 let local_var_client = &local_var_configuration.client;
98
99 let local_var_uri_str = format!(
100 "{}/organizations/{organizationId}/billing/change-frequency",
101 local_var_configuration.base_path,
102 organizationId = organization_id
103 );
104 let mut local_var_req_builder =
105 local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
106
107 if let Some(ref local_var_token) = local_var_configuration.oauth_access_token {
108 local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned());
109 };
110 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
111 local_var_req_builder = local_var_req_builder.json(&change_plan_frequency_request);
112
113 let local_var_req = local_var_req_builder.build()?;
114 let local_var_resp = local_var_client.execute(local_var_req).await?;
115
116 let local_var_status = local_var_resp.status();
117 let local_var_content = local_var_resp.text().await?;
118
119 if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
120 Ok(())
121 } else {
122 let local_var_entity: Option<ChangePlanSubscriptionFrequencyError> =
123 serde_json::from_str(&local_var_content).ok();
124 let local_var_error = ResponseContent {
125 status: local_var_status,
126 content: local_var_content,
127 entity: local_var_entity,
128 };
129 Err(Error::ResponseError(local_var_error))
130 }
131 }
132
133 async fn get_billing<'a>(
134 &self,
135 organization_id: uuid::Uuid,
136 ) -> Result<(), Error<GetBillingError>> {
137 let local_var_configuration = &self.configuration;
138
139 let local_var_client = &local_var_configuration.client;
140
141 let local_var_uri_str = format!(
142 "{}/organizations/{organizationId}/billing",
143 local_var_configuration.base_path,
144 organizationId = organization_id
145 );
146 let mut local_var_req_builder =
147 local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
148
149 if let Some(ref local_var_token) = local_var_configuration.oauth_access_token {
150 local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned());
151 };
152 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
153
154 let local_var_req = local_var_req_builder.build()?;
155 let local_var_resp = local_var_client.execute(local_var_req).await?;
156
157 let local_var_status = local_var_resp.status();
158 let local_var_content = local_var_resp.text().await?;
159
160 if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
161 Ok(())
162 } else {
163 let local_var_entity: Option<GetBillingError> =
164 serde_json::from_str(&local_var_content).ok();
165 let local_var_error = ResponseContent {
166 status: local_var_status,
167 content: local_var_content,
168 entity: local_var_entity,
169 };
170 Err(Error::ResponseError(local_var_error))
171 }
172 }
173
174 async fn get_history<'a>(
175 &self,
176 organization_id: uuid::Uuid,
177 ) -> Result<(), Error<GetHistoryError>> {
178 let local_var_configuration = &self.configuration;
179
180 let local_var_client = &local_var_configuration.client;
181
182 let local_var_uri_str = format!(
183 "{}/organizations/{organizationId}/billing/history",
184 local_var_configuration.base_path,
185 organizationId = organization_id
186 );
187 let mut local_var_req_builder =
188 local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
189
190 if let Some(ref local_var_token) = local_var_configuration.oauth_access_token {
191 local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned());
192 };
193 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
194
195 let local_var_req = local_var_req_builder.build()?;
196 let local_var_resp = local_var_client.execute(local_var_req).await?;
197
198 let local_var_status = local_var_resp.status();
199 let local_var_content = local_var_resp.text().await?;
200
201 if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
202 Ok(())
203 } else {
204 let local_var_entity: Option<GetHistoryError> =
205 serde_json::from_str(&local_var_content).ok();
206 let local_var_error = ResponseContent {
207 status: local_var_status,
208 content: local_var_content,
209 entity: local_var_entity,
210 };
211 Err(Error::ResponseError(local_var_error))
212 }
213 }
214
215 async fn get_invoices<'a>(
216 &self,
217 organization_id: uuid::Uuid,
218 status: Option<&'a str>,
219 start_after: Option<&'a str>,
220 ) -> Result<(), Error<GetInvoicesError>> {
221 let local_var_configuration = &self.configuration;
222
223 let local_var_client = &local_var_configuration.client;
224
225 let local_var_uri_str = format!(
226 "{}/organizations/{organizationId}/billing/invoices",
227 local_var_configuration.base_path,
228 organizationId = organization_id
229 );
230 let mut local_var_req_builder =
231 local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
232
233 if let Some(ref param_value) = status {
234 local_var_req_builder =
235 local_var_req_builder.query(&[("status", ¶m_value.to_string())]);
236 }
237 if let Some(ref param_value) = start_after {
238 local_var_req_builder =
239 local_var_req_builder.query(&[("startAfter", ¶m_value.to_string())]);
240 }
241 if let Some(ref local_var_token) = local_var_configuration.oauth_access_token {
242 local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned());
243 };
244 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
245
246 let local_var_req = local_var_req_builder.build()?;
247 let local_var_resp = local_var_client.execute(local_var_req).await?;
248
249 let local_var_status = local_var_resp.status();
250 let local_var_content = local_var_resp.text().await?;
251
252 if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
253 Ok(())
254 } else {
255 let local_var_entity: Option<GetInvoicesError> =
256 serde_json::from_str(&local_var_content).ok();
257 let local_var_error = ResponseContent {
258 status: local_var_status,
259 content: local_var_content,
260 entity: local_var_entity,
261 };
262 Err(Error::ResponseError(local_var_error))
263 }
264 }
265
266 async fn get_metadata<'a>(
267 &self,
268 organization_id: uuid::Uuid,
269 ) -> Result<(), Error<GetMetadataError>> {
270 let local_var_configuration = &self.configuration;
271
272 let local_var_client = &local_var_configuration.client;
273
274 let local_var_uri_str = format!(
275 "{}/organizations/{organizationId}/billing/metadata",
276 local_var_configuration.base_path,
277 organizationId = organization_id
278 );
279 let mut local_var_req_builder =
280 local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
281
282 if let Some(ref local_var_token) = local_var_configuration.oauth_access_token {
283 local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned());
284 };
285 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
286
287 let local_var_req = local_var_req_builder.build()?;
288 let local_var_resp = local_var_client.execute(local_var_req).await?;
289
290 let local_var_status = local_var_resp.status();
291 let local_var_content = local_var_resp.text().await?;
292
293 if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
294 Ok(())
295 } else {
296 let local_var_entity: Option<GetMetadataError> =
297 serde_json::from_str(&local_var_content).ok();
298 let local_var_error = ResponseContent {
299 status: local_var_status,
300 content: local_var_content,
301 entity: local_var_entity,
302 };
303 Err(Error::ResponseError(local_var_error))
304 }
305 }
306
307 async fn get_transactions<'a>(
308 &self,
309 organization_id: uuid::Uuid,
310 start_after: Option<String>,
311 ) -> Result<(), Error<GetTransactionsError>> {
312 let local_var_configuration = &self.configuration;
313
314 let local_var_client = &local_var_configuration.client;
315
316 let local_var_uri_str = format!(
317 "{}/organizations/{organizationId}/billing/transactions",
318 local_var_configuration.base_path,
319 organizationId = organization_id
320 );
321 let mut local_var_req_builder =
322 local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
323
324 if let Some(ref param_value) = start_after {
325 local_var_req_builder =
326 local_var_req_builder.query(&[("startAfter", ¶m_value.to_string())]);
327 }
328 if let Some(ref local_var_token) = local_var_configuration.oauth_access_token {
329 local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned());
330 };
331 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
332
333 let local_var_req = local_var_req_builder.build()?;
334 let local_var_resp = local_var_client.execute(local_var_req).await?;
335
336 let local_var_status = local_var_resp.status();
337 let local_var_content = local_var_resp.text().await?;
338
339 if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
340 Ok(())
341 } else {
342 let local_var_entity: Option<GetTransactionsError> =
343 serde_json::from_str(&local_var_content).ok();
344 let local_var_error = ResponseContent {
345 status: local_var_status,
346 content: local_var_content,
347 entity: local_var_entity,
348 };
349 Err(Error::ResponseError(local_var_error))
350 }
351 }
352
353 async fn setup_business_unit<'a>(
354 &self,
355 organization_id: uuid::Uuid,
356 setup_business_unit_request_body: Option<models::SetupBusinessUnitRequestBody>,
357 ) -> Result<(), Error<SetupBusinessUnitError>> {
358 let local_var_configuration = &self.configuration;
359
360 let local_var_client = &local_var_configuration.client;
361
362 let local_var_uri_str = format!(
363 "{}/organizations/{organizationId}/billing/setup-business-unit",
364 local_var_configuration.base_path,
365 organizationId = organization_id
366 );
367 let mut local_var_req_builder =
368 local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
369
370 if let Some(ref local_var_token) = local_var_configuration.oauth_access_token {
371 local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned());
372 };
373 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
374 local_var_req_builder = local_var_req_builder.json(&setup_business_unit_request_body);
375
376 let local_var_req = local_var_req_builder.build()?;
377 let local_var_resp = local_var_client.execute(local_var_req).await?;
378
379 let local_var_status = local_var_resp.status();
380 let local_var_content = local_var_resp.text().await?;
381
382 if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
383 Ok(())
384 } else {
385 let local_var_entity: Option<SetupBusinessUnitError> =
386 serde_json::from_str(&local_var_content).ok();
387 let local_var_error = ResponseContent {
388 status: local_var_status,
389 content: local_var_content,
390 entity: local_var_entity,
391 };
392 Err(Error::ResponseError(local_var_error))
393 }
394 }
395}
396
397#[derive(Debug, Clone, Serialize, Deserialize)]
399#[serde(untagged)]
400pub enum ChangePlanSubscriptionFrequencyError {
401 UnknownValue(serde_json::Value),
402}
403#[derive(Debug, Clone, Serialize, Deserialize)]
405#[serde(untagged)]
406pub enum GetBillingError {
407 UnknownValue(serde_json::Value),
408}
409#[derive(Debug, Clone, Serialize, Deserialize)]
411#[serde(untagged)]
412pub enum GetHistoryError {
413 UnknownValue(serde_json::Value),
414}
415#[derive(Debug, Clone, Serialize, Deserialize)]
417#[serde(untagged)]
418pub enum GetInvoicesError {
419 UnknownValue(serde_json::Value),
420}
421#[derive(Debug, Clone, Serialize, Deserialize)]
423#[serde(untagged)]
424pub enum GetMetadataError {
425 UnknownValue(serde_json::Value),
426}
427#[derive(Debug, Clone, Serialize, Deserialize)]
429#[serde(untagged)]
430pub enum GetTransactionsError {
431 UnknownValue(serde_json::Value),
432}
433#[derive(Debug, Clone, Serialize, Deserialize)]
435#[serde(untagged)]
436pub enum SetupBusinessUnitError {
437 UnknownValue(serde_json::Value),
438}