openapp_sdk_core/resources/
billing.rs1use std::sync::Arc;
4
5use reqwest::Method;
6
7use super::types;
8use crate::{
9 error::SdkError,
10 transport::{RequestSpec, Transport},
11};
12
13#[derive(Debug, Clone)]
14pub struct BillingClient {
15 transport: Arc<Transport>,
16}
17
18impl BillingClient {
19 pub(crate) fn new(transport: Arc<Transport>) -> Self {
20 Self { transport }
21 }
22
23 pub async fn checkout(
24 &self,
25 org_id: &str,
26 body: &types::CheckoutRequest,
27 ) -> Result<types::SubscriptionRef, SdkError> {
28 let path = format!("/orgs/{org_id}/billing/checkout");
29 self.transport
30 .request_json::<types::CheckoutRequest, types::SubscriptionRef>(RequestSpec {
31 method: Method::POST,
32 path: &path,
33 body: Some(body),
34 ..Default::default()
35 })
36 .await
37 }
38
39 pub async fn plan(&self, org_id: &str) -> Result<types::BillingPlanResponse, SdkError> {
40 let path = format!("/orgs/{org_id}/billing/plan");
41 self.transport
42 .request_json::<(), types::BillingPlanResponse>(RequestSpec {
43 method: Method::GET,
44 path: &path,
45 ..Default::default()
46 })
47 .await
48 }
49
50 pub async fn portal(
51 &self,
52 org_id: &str,
53 body: &types::PortalRequest,
54 ) -> Result<types::PortalResponse, SdkError> {
55 let path = format!("/orgs/{org_id}/billing/portal");
56 self.transport
57 .request_json::<types::PortalRequest, types::PortalResponse>(RequestSpec {
58 method: Method::POST,
59 path: &path,
60 body: Some(body),
61 ..Default::default()
62 })
63 .await
64 }
65
66 pub async fn upgrade_options(&self, org_id: &str) -> Result<types::PlansResponse, SdkError> {
67 let path = format!("/orgs/{org_id}/billing/upgrade-options");
68 self.transport
69 .request_json::<(), types::PlansResponse>(RequestSpec {
70 method: Method::GET,
71 path: &path,
72 ..Default::default()
73 })
74 .await
75 }
76
77 pub async fn usage(&self, org_id: &str) -> Result<types::QuotaReport, SdkError> {
78 let path = format!("/orgs/{org_id}/billing/usage");
79 self.transport
80 .request_json::<(), types::QuotaReport>(RequestSpec {
81 method: Method::GET,
82 path: &path,
83 ..Default::default()
84 })
85 .await
86 }
87}