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 let local_var_resp = local_var_req_builder.send().await?;
105
106 let local_var_status = local_var_resp.status();
107 let local_var_content = local_var_resp.text().await?;
108
109 if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
110 Ok(())
111 } else {
112 let local_var_entity: Option<ChangePlanSubscriptionFrequencyError> =
113 serde_json::from_str(&local_var_content).ok();
114 let local_var_error = ResponseContent {
115 status: local_var_status,
116 content: local_var_content,
117 entity: local_var_entity,
118 };
119 Err(Error::ResponseError(local_var_error))
120 }
121 }
122
123 async fn get_billing<'a>(
124 &self,
125 organization_id: uuid::Uuid,
126 ) -> Result<(), Error<GetBillingError>> {
127 let local_var_configuration = &self.configuration;
128
129 let local_var_client = &local_var_configuration.client;
130
131 let local_var_uri_str = format!(
132 "{}/organizations/{organizationId}/billing",
133 local_var_configuration.base_path,
134 organizationId = organization_id
135 );
136 let mut local_var_req_builder =
137 local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
138
139 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
140
141 let local_var_resp = local_var_req_builder.send().await?;
142
143 let local_var_status = local_var_resp.status();
144 let local_var_content = local_var_resp.text().await?;
145
146 if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
147 Ok(())
148 } else {
149 let local_var_entity: Option<GetBillingError> =
150 serde_json::from_str(&local_var_content).ok();
151 let local_var_error = ResponseContent {
152 status: local_var_status,
153 content: local_var_content,
154 entity: local_var_entity,
155 };
156 Err(Error::ResponseError(local_var_error))
157 }
158 }
159
160 async fn get_history<'a>(
161 &self,
162 organization_id: uuid::Uuid,
163 ) -> Result<(), Error<GetHistoryError>> {
164 let local_var_configuration = &self.configuration;
165
166 let local_var_client = &local_var_configuration.client;
167
168 let local_var_uri_str = format!(
169 "{}/organizations/{organizationId}/billing/history",
170 local_var_configuration.base_path,
171 organizationId = organization_id
172 );
173 let mut local_var_req_builder =
174 local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
175
176 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
177
178 let local_var_resp = local_var_req_builder.send().await?;
179
180 let local_var_status = local_var_resp.status();
181 let local_var_content = local_var_resp.text().await?;
182
183 if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
184 Ok(())
185 } else {
186 let local_var_entity: Option<GetHistoryError> =
187 serde_json::from_str(&local_var_content).ok();
188 let local_var_error = ResponseContent {
189 status: local_var_status,
190 content: local_var_content,
191 entity: local_var_entity,
192 };
193 Err(Error::ResponseError(local_var_error))
194 }
195 }
196
197 async fn get_invoices<'a>(
198 &self,
199 organization_id: uuid::Uuid,
200 status: Option<&'a str>,
201 start_after: Option<&'a str>,
202 ) -> Result<(), Error<GetInvoicesError>> {
203 let local_var_configuration = &self.configuration;
204
205 let local_var_client = &local_var_configuration.client;
206
207 let local_var_uri_str = format!(
208 "{}/organizations/{organizationId}/billing/invoices",
209 local_var_configuration.base_path,
210 organizationId = organization_id
211 );
212 let mut local_var_req_builder =
213 local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
214
215 if let Some(ref param_value) = status {
216 local_var_req_builder =
217 local_var_req_builder.query(&[("status", ¶m_value.to_string())]);
218 }
219 if let Some(ref param_value) = start_after {
220 local_var_req_builder =
221 local_var_req_builder.query(&[("startAfter", ¶m_value.to_string())]);
222 }
223 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
224
225 let local_var_resp = local_var_req_builder.send().await?;
226
227 let local_var_status = local_var_resp.status();
228 let local_var_content = local_var_resp.text().await?;
229
230 if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
231 Ok(())
232 } else {
233 let local_var_entity: Option<GetInvoicesError> =
234 serde_json::from_str(&local_var_content).ok();
235 let local_var_error = ResponseContent {
236 status: local_var_status,
237 content: local_var_content,
238 entity: local_var_entity,
239 };
240 Err(Error::ResponseError(local_var_error))
241 }
242 }
243
244 async fn get_transactions<'a>(
245 &self,
246 organization_id: uuid::Uuid,
247 start_after: Option<String>,
248 ) -> Result<(), Error<GetTransactionsError>> {
249 let local_var_configuration = &self.configuration;
250
251 let local_var_client = &local_var_configuration.client;
252
253 let local_var_uri_str = format!(
254 "{}/organizations/{organizationId}/billing/transactions",
255 local_var_configuration.base_path,
256 organizationId = organization_id
257 );
258 let mut local_var_req_builder =
259 local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
260
261 if let Some(ref param_value) = start_after {
262 local_var_req_builder =
263 local_var_req_builder.query(&[("startAfter", ¶m_value.to_string())]);
264 }
265 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
266
267 let local_var_resp = local_var_req_builder.send().await?;
268
269 let local_var_status = local_var_resp.status();
270 let local_var_content = local_var_resp.text().await?;
271
272 if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
273 Ok(())
274 } else {
275 let local_var_entity: Option<GetTransactionsError> =
276 serde_json::from_str(&local_var_content).ok();
277 let local_var_error = ResponseContent {
278 status: local_var_status,
279 content: local_var_content,
280 entity: local_var_entity,
281 };
282 Err(Error::ResponseError(local_var_error))
283 }
284 }
285
286 async fn setup_business_unit<'a>(
287 &self,
288 organization_id: uuid::Uuid,
289 setup_business_unit_request_body: Option<models::SetupBusinessUnitRequestBody>,
290 ) -> Result<(), Error<SetupBusinessUnitError>> {
291 let local_var_configuration = &self.configuration;
292
293 let local_var_client = &local_var_configuration.client;
294
295 let local_var_uri_str = format!(
296 "{}/organizations/{organizationId}/billing/setup-business-unit",
297 local_var_configuration.base_path,
298 organizationId = organization_id
299 );
300 let mut local_var_req_builder =
301 local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
302
303 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
304 local_var_req_builder = local_var_req_builder.json(&setup_business_unit_request_body);
305
306 let local_var_resp = local_var_req_builder.send().await?;
307
308 let local_var_status = local_var_resp.status();
309 let local_var_content = local_var_resp.text().await?;
310
311 if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
312 Ok(())
313 } else {
314 let local_var_entity: Option<SetupBusinessUnitError> =
315 serde_json::from_str(&local_var_content).ok();
316 let local_var_error = ResponseContent {
317 status: local_var_status,
318 content: local_var_content,
319 entity: local_var_entity,
320 };
321 Err(Error::ResponseError(local_var_error))
322 }
323 }
324}
325
326#[derive(Debug, Clone, Serialize, Deserialize)]
328#[serde(untagged)]
329pub enum ChangePlanSubscriptionFrequencyError {
330 UnknownValue(serde_json::Value),
331}
332#[derive(Debug, Clone, Serialize, Deserialize)]
334#[serde(untagged)]
335pub enum GetBillingError {
336 UnknownValue(serde_json::Value),
337}
338#[derive(Debug, Clone, Serialize, Deserialize)]
340#[serde(untagged)]
341pub enum GetHistoryError {
342 UnknownValue(serde_json::Value),
343}
344#[derive(Debug, Clone, Serialize, Deserialize)]
346#[serde(untagged)]
347pub enum GetInvoicesError {
348 UnknownValue(serde_json::Value),
349}
350#[derive(Debug, Clone, Serialize, Deserialize)]
352#[serde(untagged)]
353pub enum GetTransactionsError {
354 UnknownValue(serde_json::Value),
355}
356#[derive(Debug, Clone, Serialize, Deserialize)]
358#[serde(untagged)]
359pub enum SetupBusinessUnitError {
360 UnknownValue(serde_json::Value),
361}