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 OrganizationBillingVNextApi: Send + Sync {
29 async fn add_credit_via_bit_pay<'a>(
31 &self,
32 organization_id: &'a str,
33 bit_pay_credit_request: Option<models::BitPayCreditRequest>,
34 ) -> Result<(), Error>;
35
36 async fn get_billing_address<'a>(&self, organization_id: &'a str) -> Result<(), Error>;
38
39 async fn get_churn_mitigation_offer<'a>(&self, organization_id: &'a str) -> Result<(), Error>;
41
42 async fn get_credit<'a>(&self, organization_id: &'a str) -> Result<(), Error>;
44
45 async fn get_metadata<'a>(&self, organization_id: &'a str) -> Result<(), Error>;
47
48 async fn get_payment_method<'a>(&self, organization_id: &'a str) -> Result<(), Error>;
50
51 async fn get_warnings<'a>(&self, organization_id: &'a str) -> Result<(), Error>;
53
54 async fn redeem_churn_mitigation_offer<'a>(
56 &self,
57 organization_id: &'a str,
58 ) -> Result<(), Error>;
59
60 async fn restart_subscription<'a>(
62 &self,
63 organization_id: &'a str,
64 restart_subscription_request: Option<models::RestartSubscriptionRequest>,
65 ) -> Result<(), Error>;
66
67 async fn update_billing_address<'a>(
69 &self,
70 organization_id: &'a str,
71 billing_address_request: Option<models::BillingAddressRequest>,
72 ) -> Result<(), Error>;
73
74 async fn update_payment_method<'a>(
76 &self,
77 organization_id: &'a str,
78 tokenized_payment_method_request: Option<models::TokenizedPaymentMethodRequest>,
79 ) -> Result<(), Error>;
80}
81
82pub struct OrganizationBillingVNextApiClient {
83 configuration: Arc<configuration::Configuration>,
84}
85
86impl OrganizationBillingVNextApiClient {
87 pub fn new(configuration: Arc<configuration::Configuration>) -> Self {
88 Self { configuration }
89 }
90}
91
92#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
93#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
94impl OrganizationBillingVNextApi for OrganizationBillingVNextApiClient {
95 async fn add_credit_via_bit_pay<'a>(
96 &self,
97 organization_id: &'a str,
98 bit_pay_credit_request: Option<models::BitPayCreditRequest>,
99 ) -> Result<(), Error> {
100 let local_var_configuration = &self.configuration;
101
102 let local_var_client = &local_var_configuration.client;
103
104 let local_var_uri_str = format!(
105 "{}/organizations/{organizationId}/billing/vnext/credit/bitpay",
106 local_var_configuration.base_path,
107 organizationId = crate::apis::urlencode(organization_id)
108 );
109 let mut local_var_req_builder =
110 local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
111
112 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
113 local_var_req_builder = local_var_req_builder.json(&bit_pay_credit_request);
114
115 bitwarden_api_base::process_with_empty_response(local_var_req_builder).await
116 }
117
118 async fn get_billing_address<'a>(&self, organization_id: &'a str) -> Result<(), Error> {
119 let local_var_configuration = &self.configuration;
120
121 let local_var_client = &local_var_configuration.client;
122
123 let local_var_uri_str = format!(
124 "{}/organizations/{organizationId}/billing/vnext/address",
125 local_var_configuration.base_path,
126 organizationId = crate::apis::urlencode(organization_id)
127 );
128 let mut local_var_req_builder =
129 local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
130
131 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
132
133 bitwarden_api_base::process_with_empty_response(local_var_req_builder).await
134 }
135
136 async fn get_churn_mitigation_offer<'a>(&self, organization_id: &'a str) -> Result<(), Error> {
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/vnext/churn-mitigation-offer",
143 local_var_configuration.base_path,
144 organizationId = crate::apis::urlencode(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 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
150
151 bitwarden_api_base::process_with_empty_response(local_var_req_builder).await
152 }
153
154 async fn get_credit<'a>(&self, organization_id: &'a str) -> Result<(), Error> {
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/vnext/credit",
161 local_var_configuration.base_path,
162 organizationId = crate::apis::urlencode(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 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
168
169 bitwarden_api_base::process_with_empty_response(local_var_req_builder).await
170 }
171
172 async fn get_metadata<'a>(&self, organization_id: &'a str) -> Result<(), Error> {
173 let local_var_configuration = &self.configuration;
174
175 let local_var_client = &local_var_configuration.client;
176
177 let local_var_uri_str = format!(
178 "{}/organizations/{organizationId}/billing/vnext/metadata",
179 local_var_configuration.base_path,
180 organizationId = crate::apis::urlencode(organization_id)
181 );
182 let mut local_var_req_builder =
183 local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
184
185 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
186
187 bitwarden_api_base::process_with_empty_response(local_var_req_builder).await
188 }
189
190 async fn get_payment_method<'a>(&self, organization_id: &'a str) -> Result<(), Error> {
191 let local_var_configuration = &self.configuration;
192
193 let local_var_client = &local_var_configuration.client;
194
195 let local_var_uri_str = format!(
196 "{}/organizations/{organizationId}/billing/vnext/payment-method",
197 local_var_configuration.base_path,
198 organizationId = crate::apis::urlencode(organization_id)
199 );
200 let mut local_var_req_builder =
201 local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
202
203 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
204
205 bitwarden_api_base::process_with_empty_response(local_var_req_builder).await
206 }
207
208 async fn get_warnings<'a>(&self, organization_id: &'a str) -> Result<(), Error> {
209 let local_var_configuration = &self.configuration;
210
211 let local_var_client = &local_var_configuration.client;
212
213 let local_var_uri_str = format!(
214 "{}/organizations/{organizationId}/billing/vnext/warnings",
215 local_var_configuration.base_path,
216 organizationId = crate::apis::urlencode(organization_id)
217 );
218 let mut local_var_req_builder =
219 local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
220
221 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
222
223 bitwarden_api_base::process_with_empty_response(local_var_req_builder).await
224 }
225
226 async fn redeem_churn_mitigation_offer<'a>(
227 &self,
228 organization_id: &'a str,
229 ) -> Result<(), Error> {
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/vnext/churn-mitigation-offer/redeem",
236 local_var_configuration.base_path,
237 organizationId = crate::apis::urlencode(organization_id)
238 );
239 let mut local_var_req_builder =
240 local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
241
242 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
243
244 bitwarden_api_base::process_with_empty_response(local_var_req_builder).await
245 }
246
247 async fn restart_subscription<'a>(
248 &self,
249 organization_id: &'a str,
250 restart_subscription_request: Option<models::RestartSubscriptionRequest>,
251 ) -> Result<(), Error> {
252 let local_var_configuration = &self.configuration;
253
254 let local_var_client = &local_var_configuration.client;
255
256 let local_var_uri_str = format!(
257 "{}/organizations/{organizationId}/billing/vnext/subscription/restart",
258 local_var_configuration.base_path,
259 organizationId = crate::apis::urlencode(organization_id)
260 );
261 let mut local_var_req_builder =
262 local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
263
264 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
265 local_var_req_builder = local_var_req_builder.json(&restart_subscription_request);
266
267 bitwarden_api_base::process_with_empty_response(local_var_req_builder).await
268 }
269
270 async fn update_billing_address<'a>(
271 &self,
272 organization_id: &'a str,
273 billing_address_request: Option<models::BillingAddressRequest>,
274 ) -> Result<(), Error> {
275 let local_var_configuration = &self.configuration;
276
277 let local_var_client = &local_var_configuration.client;
278
279 let local_var_uri_str = format!(
280 "{}/organizations/{organizationId}/billing/vnext/address",
281 local_var_configuration.base_path,
282 organizationId = crate::apis::urlencode(organization_id)
283 );
284 let mut local_var_req_builder =
285 local_var_client.request(reqwest::Method::PUT, local_var_uri_str.as_str());
286
287 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
288 local_var_req_builder = local_var_req_builder.json(&billing_address_request);
289
290 bitwarden_api_base::process_with_empty_response(local_var_req_builder).await
291 }
292
293 async fn update_payment_method<'a>(
294 &self,
295 organization_id: &'a str,
296 tokenized_payment_method_request: Option<models::TokenizedPaymentMethodRequest>,
297 ) -> Result<(), Error> {
298 let local_var_configuration = &self.configuration;
299
300 let local_var_client = &local_var_configuration.client;
301
302 let local_var_uri_str = format!(
303 "{}/organizations/{organizationId}/billing/vnext/payment-method",
304 local_var_configuration.base_path,
305 organizationId = crate::apis::urlencode(organization_id)
306 );
307 let mut local_var_req_builder =
308 local_var_client.request(reqwest::Method::PUT, local_var_uri_str.as_str());
309
310 local_var_req_builder = local_var_req_builder.with_extension(AuthRequired::Bearer);
311 local_var_req_builder = local_var_req_builder.json(&tokenized_payment_method_request);
312
313 bitwarden_api_base::process_with_empty_response(local_var_req_builder).await
314 }
315}