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}