pub struct UsageSnapshot {Show 14 fields
pub schema_version: u32,
pub provider: String,
pub account: String,
pub observed_at: u64,
pub plan: Option<String>,
pub limit_reached: Option<bool>,
pub spend_control_reached: Option<bool>,
pub windows: Vec<UsageWindow>,
pub model_availability: Vec<ModelAvailability>,
pub credits: Option<CreditBalance>,
pub banked_resets: Option<BankedResets>,
pub identity_prefix: Option<String>,
pub seat_fingerprint: Option<String>,
pub notes: Vec<String>,
}Expand description
Normalized, secret-free usage observation for one (provider, account).
Fields§
§schema_version: u32§provider: StringCanonical OAuth provider id (anthropic, openai-codex, kimi-code, xai-auth).
account: Stringdefault or the account label.
observed_at: u64Epoch ms when the body was received; authoritative for staleness.
plan: Option<String>§limit_reached: Option<bool>Provider-asserted overall exhaustion flag (Codex rate_limit.limit_reached).
spend_control_reached: Option<bool>Workspace/account spend control tripped (Codex spend_control.reached).
Some(true) blocks subscribed availability exactly like limit_reached.
windows: Vec<UsageWindow>§model_availability: Vec<ModelAvailability>§credits: Option<CreditBalance>§banked_resets: Option<BankedResets>§identity_prefix: Option<String>First 8 chars of a provider account id when the response carries one.
seat_fingerprint: Option<String>Opaque full seat identity paired with the bearer used for this reading. Currently supplied by the Codex adapter; absent on older brokers.
notes: Vec<String>Fixed-vocabulary parse notes (never raw keys or values).
Implementations§
Source§impl UsageSnapshot
impl UsageSnapshot
Sourcepub fn is_stale(&self, now_ms: u64, max_age_ms: u64) -> bool
pub fn is_stale(&self, now_ms: u64, max_age_ms: u64) -> bool
Observation older than max_age_ms (or from the future) is stale.
Stale readings are never capacity.
pub fn window(&self, id: &str) -> Option<&UsageWindow>
pub fn account_windows(&self) -> impl Iterator<Item = &UsageWindow>
Sourcepub fn longest_account_window(&self) -> Option<&UsageWindow>
pub fn longest_account_window(&self) -> Option<&UsageWindow>
The account window with the longest known duration (e.g. weekly). Windows with unknown duration sort last.
Sourcepub fn has_proven_capacity(&self, now_ms: u64, max_age_ms: u64) -> bool
pub fn has_proven_capacity(&self, now_ms: u64, max_age_ms: u64) -> bool
Fresh, provider did not flag exhaustion or a tripped spend control, at least one account window, and every account window has a valid percent below 100.
Sourcepub fn model_availability_for(&self, model: &str) -> Option<&ModelAvailability>
pub fn model_availability_for(&self, model: &str) -> Option<&ModelAvailability>
Availability entry for a requested model id, if the provider reported one.
Sourcepub fn has_proven_capacity_for_model(
&self,
model: &str,
now_ms: u64,
max_age_ms: u64,
) -> bool
pub fn has_proven_capacity_for_model( &self, model: &str, now_ms: u64, max_age_ms: u64, ) -> bool
Model-aware capacity: account capacity AND, when the provider reported
anything about this model, that entry must be Available. A gated
model (model_usage.available == false, Astra-style) or an exhausted
model window rejects even when the generic quota is nearly unused.
Models the provider did not mention fall back to account capacity.
Sourcepub fn earliest_reset_at(&self) -> Option<u64>
pub fn earliest_reset_at(&self) -> Option<u64>
Earliest reset across all windows and model availability entries.
Trait Implementations§
Source§impl Clone for UsageSnapshot
impl Clone for UsageSnapshot
Source§fn clone(&self) -> UsageSnapshot
fn clone(&self) -> UsageSnapshot
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for UsageSnapshot
impl Debug for UsageSnapshot
Source§impl<'de> Deserialize<'de> for UsageSnapshot
impl<'de> Deserialize<'de> for UsageSnapshot
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<UsageSnapshot, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<UsageSnapshot, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl PartialEq for UsageSnapshot
impl PartialEq for UsageSnapshot
Source§impl Serialize for UsageSnapshot
impl Serialize for UsageSnapshot
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
impl StructuralPartialEq for UsageSnapshot
Auto Trait Implementations§
impl Freeze for UsageSnapshot
impl RefUnwindSafe for UsageSnapshot
impl Send for UsageSnapshot
impl Sync for UsageSnapshot
impl Unpin for UsageSnapshot
impl UnsafeUnpin for UsageSnapshot
impl UnwindSafe for UsageSnapshot
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more