Skip to main content

seher/claude/
types.rs

1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Deserialize, Serialize)]
5pub struct UsageWindow {
6    pub utilization: f64,
7    pub resets_at: Option<DateTime<Utc>>,
8}
9
10#[derive(Debug, Deserialize, Serialize)]
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    #[must_use]
19    pub fn next_reset_time(&self) -> Option<chrono::DateTime<Utc>> {
20        [
21            self.five_hour.as_ref(),
22            self.seven_day.as_ref(),
23            self.seven_day_sonnet.as_ref(),
24        ]
25        .into_iter()
26        .flatten()
27        .filter(|w| w.utilization >= 100.0)
28        .filter_map(|w| w.resets_at)
29        .max()
30    }
31}