1use chrono::{DateTime, Utc};
2use serde::Deserialize;
3
4#[derive(Debug, Deserialize)]
5pub struct UsageWindow {
6 pub utilization: f64,
7 pub resets_at: Option<DateTime<Utc>>,
8}
9
10#[derive(Debug, Deserialize)]
11pub struct UsageResponse {
12 pub five_hour: Option<UsageWindow>,
13 pub seven_day: Option<UsageWindow>,
14 pub seven_day_sonnet: Option<UsageWindow>,
15}
16
17impl UsageResponse {
18 pub fn next_reset_time(&self) -> Option<chrono::DateTime<Utc>> {
19 [self.five_hour.as_ref(), self.seven_day.as_ref()]
20 .into_iter()
21 .flatten()
22 .filter(|w| w.utilization >= 100.0)
23 .filter_map(|w| w.resets_at)
24 .max()
25 }
26}