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}