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