Skip to main content

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    #[deprecated(
32        note = "Legacy v2-style usage helper. Rainy API v3 usage endpoints require JWT/session auth and return different shapes."
33    )]
34    pub async fn get_credit_stats(&self, days: Option<u32>) -> Result<CreditInfo> {
35        let endpoint = if let Some(days) = days {
36            format!("/usage/credits?days={days}")
37        } else {
38            "/usage/credits".to_string()
39        };
40
41        #[derive(serde::Deserialize)]
42        struct CreditStatsResponse {
43            credits: CreditInfo,
44        }
45
46        let response: CreditStatsResponse = self
47            .make_request(reqwest::Method::GET, &endpoint, None)
48            .await?;
49
50        Ok(response.credits)
51    }
52
53    /// Get usage statistics
54    ///
55    /// This endpoint returns detailed usage statistics.
56    ///
57    /// # Arguments
58    ///
59    /// * `days` - Optional number of days to look back (default: 30)
60    ///
61    /// # Returns
62    ///
63    /// Returns comprehensive usage statistics including daily usage and recent transactions.
64    ///
65    /// # Example
66    ///
67    /// ```rust,no_run
68    /// # use rainy_sdk::RainyClient;
69    /// # async fn example() -> Result<(), Box<dyn std::error::Error>> {
70    /// let client = RainyClient::with_api_key("user-api-key")?;
71    ///
72    /// let usage = client.get_usage_stats(Some(30)).await?;
73    /// println!("Total requests: {}", usage.total_requests);
74    /// println!("Total tokens: {}", usage.total_tokens);
75    ///
76    /// for daily in &usage.daily_usage {
77    ///     println!("{}: {} credits used", daily.date, daily.credits_used);
78    /// }
79    /// # Ok(())
80    /// # }
81    /// ```
82    #[deprecated(
83        note = "Legacy v2-style usage helper. Rainy API v3 usage endpoints require JWT/session auth and return different shapes."
84    )]
85    pub async fn get_usage_stats(&self, days: Option<u32>) -> Result<UsageStats> {
86        let endpoint = if let Some(days) = days {
87            format!("/usage/stats?days={days}")
88        } else {
89            "/usage/stats".to_string()
90        };
91
92        self.make_request(reqwest::Method::GET, &endpoint, None)
93            .await
94    }
95}