lago_client/queries/
subscription.rs1use lago_types::{
2 error::{LagoError, Result},
3 requests::subscription::{
4 CreateSubscriptionRequest, DeleteSubscriptionRequest, GetSubscriptionRequest,
5 ListCustomerSubscriptionsRequest, ListSubscriptionsRequest, UpdateSubscriptionRequest,
6 },
7 responses::subscription::{
8 CreateSubscriptionResponse, DeleteSubscriptionResponse, GetSubscriptionResponse,
9 ListSubscriptionsResponse, UpdateSubscriptionResponse,
10 },
11};
12use url::Url;
13
14use crate::client::LagoClient;
15
16impl LagoClient {
17 pub async fn list_subscriptions(
25 &self,
26 request: Option<ListSubscriptionsRequest>,
27 ) -> Result<ListSubscriptionsResponse> {
28 let region = self.config.region()?;
29 let mut url = Url::parse(&format!("{}/subscriptions", region.endpoint()))
30 .map_err(|e| LagoError::Configuration(format!("Invalid URL: {e}")))?;
31
32 if let Some(req) = request {
33 let query_params = req.to_query_params();
34
35 if !query_params.is_empty() {
36 let query_string = query_params
37 .iter()
38 .map(|(k, v)| format!("{k}={v}"))
39 .collect::<Vec<_>>()
40 .join("&");
41 url.set_query(Some(&query_string));
42 }
43 }
44
45 self.make_request("GET", url.as_str(), None::<&()>).await
46 }
47
48 pub async fn get_subscription(
56 &self,
57 request: GetSubscriptionRequest,
58 ) -> Result<GetSubscriptionResponse> {
59 let region = self.config.region()?;
60 let url = Url::parse(&format!(
61 "{}/subscriptions/{}",
62 region.endpoint(),
63 request.external_id
64 ))
65 .map_err(|e| LagoError::Configuration(format!("Invalid URL: {e}")))?;
66
67 self.make_request("GET", url.as_str(), None::<&()>).await
68 }
69
70 pub async fn list_customer_subscriptions(
78 &self,
79 request: ListCustomerSubscriptionsRequest,
80 ) -> Result<ListSubscriptionsResponse> {
81 let region = self.config.region()?;
82 let mut url = Url::parse(&format!(
83 "{}/customers/{}/subscriptions",
84 region.endpoint(),
85 request.external_customer_id
86 ))
87 .map_err(|e| LagoError::Configuration(format!("Invalid URL: {e}")))?;
88
89 let query_params = request.to_query_params();
90
91 if !query_params.is_empty() {
92 let query_string = query_params
93 .iter()
94 .map(|(k, v)| format!("{k}={v}"))
95 .collect::<Vec<_>>()
96 .join("&");
97 url.set_query(Some(&query_string));
98 }
99
100 self.make_request("GET", url.as_str(), None::<&()>).await
101 }
102
103 pub async fn create_subscription(
111 &self,
112 request: CreateSubscriptionRequest,
113 ) -> Result<CreateSubscriptionResponse> {
114 let region = self.config.region()?;
115 let url = Url::parse(&format!("{}/subscriptions", region.endpoint()))
116 .map_err(|e| LagoError::Configuration(format!("Invalid URL: {e}")))?;
117
118 self.make_request("POST", url.as_str(), Some(&request))
119 .await
120 }
121
122 pub async fn update_subscription(
130 &self,
131 request: UpdateSubscriptionRequest,
132 ) -> Result<UpdateSubscriptionResponse> {
133 let region = self.config.region()?;
134 let url = Url::parse(&format!(
135 "{}/subscriptions/{}",
136 region.endpoint(),
137 request.external_id
138 ))
139 .map_err(|e| LagoError::Configuration(format!("Invalid URL: {e}")))?;
140
141 self.make_request("PUT", url.as_str(), Some(&request)).await
142 }
143
144 pub async fn delete_subscription(
152 &self,
153 request: DeleteSubscriptionRequest,
154 ) -> Result<DeleteSubscriptionResponse> {
155 let region = self.config.region()?;
156 let mut url = Url::parse(&format!(
157 "{}/subscriptions/{}",
158 region.endpoint(),
159 request.external_id
160 ))
161 .map_err(|e| LagoError::Configuration(format!("Invalid URL: {e}")))?;
162
163 let query_params = request.to_query_params();
164
165 if !query_params.is_empty() {
166 let query_string = query_params
167 .iter()
168 .map(|(k, v)| format!("{k}={v}"))
169 .collect::<Vec<_>>()
170 .join("&");
171 url.set_query(Some(&query_string));
172 }
173
174 self.make_request("DELETE", url.as_str(), None::<&()>).await
175 }
176}