gproxy_channel_api/
usage.rs1use serde::Serialize;
16use serde_json::Value;
17
18#[derive(Debug, Clone, Default, Serialize)]
20pub struct UsageSnapshot {
21 #[serde(skip_serializing_if = "Option::is_none")]
24 pub plan: Option<String>,
25 pub windows: Vec<UsageWindow>,
28 #[serde(skip_serializing_if = "Option::is_none")]
30 pub credits: Option<UsageCredits>,
31 #[serde(skip_serializing_if = "Option::is_none")]
33 pub rate_limit_reset_credits: Option<RateLimitResetCredits>,
34 pub raw: Value,
36}
37
38#[derive(Debug, Clone, Default, Serialize)]
43pub struct UsageWindow {
44 pub name: String,
46 #[serde(skip_serializing_if = "Option::is_none")]
48 pub label: Option<String>,
49 #[serde(skip_serializing_if = "Option::is_none")]
50 pub used_percent: Option<f64>,
51 #[serde(skip_serializing_if = "Option::is_none")]
52 pub used: Option<f64>,
53 #[serde(skip_serializing_if = "Option::is_none")]
54 pub limit: Option<f64>,
55 #[serde(skip_serializing_if = "Option::is_none")]
57 pub resets_at: Option<String>,
58 #[serde(skip_serializing_if = "Option::is_none")]
60 pub resets_at_unix: Option<i64>,
61 #[serde(skip_serializing_if = "Option::is_none")]
63 pub window_seconds: Option<i64>,
64}
65
66impl UsageWindow {
67 pub fn percent(name: impl Into<String>, used_percent: f64) -> Self {
69 Self {
70 name: name.into(),
71 used_percent: Some(used_percent),
72 ..Default::default()
73 }
74 }
75
76 pub fn amounts(name: impl Into<String>, used: f64, limit: f64) -> Self {
78 Self {
79 name: name.into(),
80 used: Some(used),
81 limit: Some(limit),
82 ..Default::default()
83 }
84 }
85
86 pub fn resets_iso(mut self, iso: impl Into<String>) -> Self {
88 self.resets_at = Some(iso.into());
89 self
90 }
91
92 pub fn resets_unix(mut self, unix: i64) -> Self {
94 self.resets_at_unix = Some(unix);
95 self
96 }
97
98 pub fn window_secs(mut self, seconds: i64) -> Self {
100 self.window_seconds = Some(seconds);
101 self
102 }
103
104 pub fn label(mut self, label: impl Into<String>) -> Self {
106 self.label = Some(label.into());
107 self
108 }
109}
110
111#[derive(Debug, Clone, Default, Serialize)]
114pub struct UsageCredits {
115 #[serde(skip_serializing_if = "Option::is_none")]
116 pub has_credits: Option<bool>,
117 #[serde(skip_serializing_if = "Option::is_none")]
118 pub unlimited: Option<bool>,
119 #[serde(skip_serializing_if = "Option::is_none")]
121 pub balance: Option<String>,
122 #[serde(skip_serializing_if = "Option::is_none")]
124 pub used_credits: Option<f64>,
125 #[serde(skip_serializing_if = "Option::is_none")]
127 pub monthly_limit: Option<f64>,
128 #[serde(skip_serializing_if = "Option::is_none")]
129 pub currency: Option<String>,
130}
131
132#[derive(Debug, Clone, Default, Serialize)]
133pub struct RateLimitResetCredits {
134 pub available_count: i64,
135}
136
137#[derive(Debug, Clone, Serialize)]
138pub struct RateLimitResetCreditConsumeResponse {
139 pub outcome: RateLimitResetCreditConsumeOutcome,
140 #[serde(skip_serializing_if = "Option::is_none")]
141 pub windows_reset: Option<i64>,
142 pub raw: Value,
143}
144
145#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
146#[serde(rename_all = "snake_case")]
147pub enum RateLimitResetCreditConsumeOutcome {
148 Reset,
149 NothingToReset,
150 NoCredit,
151 AlreadyRedeemed,
152}