rainy_sdk/endpoints/
usage.rs

1use crate::client::RainyClient;
2use crate::error::Result;
3use crate::models::{CreditInfo, UsageStats};
4
5impl RainyClient {
6    /// Get credit statistics
7    ///
8    /// This endpoint returns information about the user's credit usage.
9    ///
10    /// # Arguments
11    ///
12    /// * `days` - Optional number of days to look back (default: 30)
13    ///
14    /// # Returns
15    ///
16    /// Returns credit information including balance, usage, and allocation.
17    ///
18    /// # Example
19    ///
20    /// ```rust,no_run
21    /// # use rainy_sdk::RainyClient;
22    /// # async fn example() -> Result<(), Box<dyn std::error::Error>> {
23    /// let client = RainyClient::with_api_key("user-api-key")?;
24    ///
25    /// let credits = client.get_credit_stats(Some(7)).await?;
26    /// println!("Current credits: {}", credits.current_credits);
27    /// println!("Estimated cost: {}", credits.estimated_cost);
28    /// # Ok(())
29    /// # }
30    /// ```
31    pub async fn get_credit_stats(&self, days: Option<u32>) -> Result<CreditInfo> {
32        let endpoint = if let Some(days) = days {
33            format!("/usage/credits?days={days}")
34        } else {
35            "/usage/credits".to_string()
36        };
37
38        #[derive(serde::Deserialize)]
39        struct CreditStatsResponse {
40            credits: CreditInfo,
41        }
42
43        let response: CreditStatsResponse = self
44            .make_request(reqwest::Method::GET, &endpoint, None)
45            .await?;
46
47        Ok(response.credits)
48    }
49
50    /// Get usage statistics
51    ///
52    /// This endpoint returns detailed usage statistics.
53    ///
54    /// # Arguments
55    ///
56    /// * `days` - Optional number of days to look back (default: 30)
57    ///
58    /// # Returns
59    ///
60    /// Returns comprehensive usage statistics including daily usage and recent transactions.
61    ///
62    /// # Example
63    ///
64    /// ```rust,no_run
65    /// # use rainy_sdk::RainyClient;
66    /// # async fn example() -> Result<(), Box<dyn std::error::Error>> {
67    /// let client = RainyClient::with_api_key("user-api-key")?;
68    ///
69    /// let usage = client.get_usage_stats(Some(30)).await?;
70    /// println!("Total requests: {}", usage.total_requests);
71    /// println!("Total tokens: {}", usage.total_tokens);
72    ///
73    /// for daily in &usage.daily_usage {
74    ///     println!("{}: {} credits used", daily.date, daily.credits_used);
75    /// }
76    /// # Ok(())
77    /// # }
78    /// ```
79    pub async fn get_usage_stats(&self, days: Option<u32>) -> Result<UsageStats> {
80        let endpoint = if let Some(days) = days {
81            format!("/usage/stats?days={days}")
82        } else {
83            "/usage/stats".to_string()
84        };
85
86        self.make_request(reqwest::Method::GET, &endpoint, None)
87            .await
88    }
89}