use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct RateLimit {
pub utilization: Option<f64>,
#[serde(rename = "resets_at")]
pub resets_at: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct ExtraUsage {
pub is_enabled: bool,
#[serde(rename = "monthly_limit")]
pub monthly_limit: Option<i64>,
#[serde(rename = "used_credits")]
pub used_credits: Option<i64>,
pub utilization: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct Utilization {
#[serde(rename = "five_hour")]
pub five_hour: Option<RateLimit>,
#[serde(rename = "seven_day")]
pub seven_day: Option<RateLimit>,
#[serde(rename = "seven_day_oauth_apps")]
pub seven_day_oauth_apps: Option<RateLimit>,
#[serde(rename = "seven_day_opus")]
pub seven_day_opus: Option<RateLimit>,
#[serde(rename = "seven_day_sonnet")]
pub seven_day_sonnet: Option<RateLimit>,
#[serde(rename = "extra_usage")]
pub extra_usage: Option<ExtraUsage>,
}
pub async fn fetch_utilization() -> Result<Utilization, String> {
Ok(Utilization::default())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_rate_limit_default() {
let rl = RateLimit::default();
assert!(rl.utilization.is_none());
assert!(rl.resets_at.is_none());
}
#[test]
fn test_extra_usage_default() {
let eu = ExtraUsage::default();
assert!(!eu.is_enabled);
assert!(eu.monthly_limit.is_none());
assert!(eu.used_credits.is_none());
}
#[test]
fn test_utilization_default() {
let u = Utilization::default();
assert!(u.five_hour.is_none());
assert!(u.seven_day.is_none());
assert!(u.extra_usage.is_none());
}
}