lago_client/queries/
billable_metric.rs1use lago_types::{
2 error::{LagoError, Result},
3 requests::billable_metric::{
4 CreateBillableMetricRequest, GetBillableMetricRequest, ListBillableMetricsRequest,
5 },
6 responses::billable_metric::{
7 CreateBillableMetricResponse, GetBillableMetricResponse, ListBillableMetricsResponse,
8 },
9};
10use url::Url;
11
12use crate::client::LagoClient;
13
14impl LagoClient {
15 pub async fn list_billable_metrics(
23 &self,
24 request: Option<ListBillableMetricsRequest>,
25 ) -> Result<ListBillableMetricsResponse> {
26 let request = request.unwrap_or_default();
27 let region = self.config.region()?;
28 let mut url = Url::parse(&format!("{}/billable_metrics", region.endpoint()))
29 .map_err(|e| LagoError::Configuration(format!("Invalid URL: {e}")))?;
30
31 let query_params = request.to_query_params();
32
33 if !query_params.is_empty() {
34 let query_string = query_params
35 .iter()
36 .map(|(k, v)| format!("{k}={v}"))
37 .collect::<Vec<_>>()
38 .join("&");
39 url.set_query(Some(&query_string));
40 }
41
42 self.make_request("GET", url.as_str(), None::<&()>).await
43 }
44
45 pub async fn get_billable_metric(
53 &self,
54 request: GetBillableMetricRequest,
55 ) -> Result<GetBillableMetricResponse> {
56 let region = self.config.region()?;
57 let url = format!("{}/billable_metrics/{}", region.endpoint(), request.code);
58
59 self.make_request("GET", &url, None::<&()>).await
60 }
61
62 pub async fn create_billable_metric(
70 &self,
71 request: CreateBillableMetricRequest,
72 ) -> Result<CreateBillableMetricResponse> {
73 let region = self.config.region()?;
74 let url = format!("{}/billable_metrics", region.endpoint());
75
76 self.make_request("POST", &url, Some(&request)).await
77 }
78}