lago_client/queries/
customer_usage.rs

1use lago_types::{
2    error::{LagoError, Result},
3    requests::customer_usage::GetCustomerCurrentUsageRequest,
4    responses::customer_usage::GetCustomerCurrentUsageResponse,
5};
6use url::Url;
7
8use crate::client::LagoClient;
9
10impl LagoClient {
11    /// Retrieves the current usage for a customer's subscription
12    ///
13    /// This endpoint enables the retrieval of usage-based billing data for a customer
14    /// within the current billing period.
15    ///
16    /// # Arguments
17    /// * `request` - The request containing the customer and subscription IDs
18    ///
19    /// # Returns
20    /// A `Result` containing the customer usage data or an error
21    pub async fn get_customer_current_usage(
22        &self,
23        request: GetCustomerCurrentUsageRequest,
24    ) -> Result<GetCustomerCurrentUsageResponse> {
25        let region = self.config.region()?;
26        let mut url = Url::parse(&format!(
27            "{}/customers/{}/current_usage",
28            region.endpoint(),
29            request.external_customer_id
30        ))
31        .map_err(|e| LagoError::Configuration(format!("Invalid URL: {e}")))?;
32
33        let query_params = request.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        self.make_request("GET", url.as_str(), None::<&()>).await
45    }
46}