lago_client/queries/
plan.rs1use lago_types::{
2 error::{LagoError, Result},
3 requests::plan::{
4 CreatePlanRequest, DeletePlanRequest, GetPlanRequest, ListPlansRequest, UpdatePlanRequest,
5 },
6 responses::plan::{
7 CreatePlanResponse, DeletePlanResponse, GetPlanResponse, ListPlansResponse,
8 UpdatePlanResponse,
9 },
10};
11use url::Url;
12
13use crate::client::LagoClient;
14
15impl LagoClient {
16 pub async fn list_plans(&self, request: Option<ListPlansRequest>) -> Result<ListPlansResponse> {
24 let region = self.config.region()?;
25 let mut url = Url::parse(&format!("{}/plans", region.endpoint()))
26 .map_err(|e| LagoError::Configuration(format!("Invalid URL: {e}")))?;
27
28 if let Some(req) = request {
29 let query_params = req.to_query_params();
30
31 if !query_params.is_empty() {
32 let query_string = query_params
33 .iter()
34 .map(|(k, v)| format!("{k}={v}"))
35 .collect::<Vec<_>>()
36 .join("&");
37 url.set_query(Some(&query_string));
38 }
39 }
40
41 self.make_request("GET", url.as_str(), None::<&()>).await
42 }
43
44 pub async fn get_plan(&self, request: GetPlanRequest) -> Result<GetPlanResponse> {
52 let region = self.config.region()?;
53 let url = Url::parse(&format!("{}/plans/{}", region.endpoint(), request.code))
54 .map_err(|e| LagoError::Configuration(format!("Invalid URL: {e}")))?;
55
56 self.make_request("GET", url.as_str(), None::<&()>).await
57 }
58
59 pub async fn create_plan(&self, request: CreatePlanRequest) -> Result<CreatePlanResponse> {
67 let region = self.config.region()?;
68 let url = Url::parse(&format!("{}/plans", region.endpoint()))
69 .map_err(|e| LagoError::Configuration(format!("Invalid URL: {e}")))?;
70
71 self.make_request("POST", url.as_str(), Some(&request))
72 .await
73 }
74
75 pub async fn update_plan(&self, request: UpdatePlanRequest) -> Result<UpdatePlanResponse> {
83 let region = self.config.region()?;
84 let url = Url::parse(&format!("{}/plans/{}", region.endpoint(), request.code))
85 .map_err(|e| LagoError::Configuration(format!("Invalid URL: {e}")))?;
86
87 self.make_request("PUT", url.as_str(), Some(&request)).await
88 }
89
90 pub async fn delete_plan(&self, request: DeletePlanRequest) -> Result<DeletePlanResponse> {
98 let region = self.config.region()?;
99 let url = Url::parse(&format!("{}/plans/{}", region.endpoint(), request.code))
100 .map_err(|e| LagoError::Configuration(format!("Invalid URL: {e}")))?;
101
102 self.make_request("DELETE", url.as_str(), None::<&()>).await
103 }
104}