lago_client/queries/
customer.rs1use lago_types::{
2 error::{LagoError, Result},
3 requests::customer::{CreateCustomerRequest, GetCustomerRequest, ListCustomersRequest},
4 responses::customer::{CreateCustomerResponse, GetCustomerResponse, ListCustomersResponse},
5};
6use url::Url;
7
8use crate::client::LagoClient;
9
10impl LagoClient {
11 pub async fn list_customers(
19 &self,
20 request: Option<ListCustomersRequest>,
21 ) -> Result<ListCustomersResponse> {
22 let request = request.unwrap_or_default();
23 let region = self.config.region()?;
24 let mut url = Url::parse(&format!("{}/customers", region.endpoint()))
25 .map_err(|e| LagoError::Configuration(format!("Invalid URL: {e}")))?;
26
27 let query_params = request.to_query_params();
28
29 if !query_params.is_empty() {
30 let query_string = query_params
31 .iter()
32 .map(|(k, v)| format!("{k}={v}"))
33 .collect::<Vec<_>>()
34 .join("&");
35 url.set_query(Some(&query_string));
36 }
37
38 self.make_request("GET", url.as_str(), None::<&()>).await
39 }
40
41 pub async fn get_customer(&self, request: GetCustomerRequest) -> Result<GetCustomerResponse> {
49 let region = self.config.region()?;
50 let url = format!("{}/customers/{}", region.endpoint(), request.external_id);
51
52 self.make_request("GET", &url, None::<&()>).await
53 }
54
55 pub async fn create_customer(
63 &self,
64 request: CreateCustomerRequest,
65 ) -> Result<CreateCustomerResponse> {
66 let region = self.config.region()?;
67 let url = format!("{}/customers", region.endpoint());
68
69 self.make_request("POST", &url, Some(&request)).await
70 }
71}