Skip to main content

RateLeaseKernel

Struct RateLeaseKernel 

Source
pub struct RateLeaseKernel { /* private fields */ }
Expand description

An in-process registry of RateLeases, keyed by an opaque subject string (the §72.c dispatch gate composes the key from the budget’s scope + the effect + the quota kind, e.g. "daemon:Outbound:Tool(TelnyxCall):rate"). This is the OSS single-replica reference; the §72.e enterprise layer binds the per-tenant Redis RateLimiter for multi-replica enforcement.

Implementations§

Source§

impl RateLeaseKernel

Source

pub fn new() -> Self

Source

pub fn register(&mut self, key: impl Into<String>, lease: RateLease)

Register (or replace) the lease for key.

Source

pub fn contains(&self, key: &str) -> bool

Whether a lease is registered for key.

Source

pub fn try_acquire(&mut self, key: &str, now: DateTime<Utc>) -> AcquireOutcome

Attempt to consume one token from the lease at key. A key with no registered lease is unbudgeted ⇒ always AcquireOutcome::Granted (an effect with no declared quota is not rate-limited).

Source

pub fn try_acquire_all( &mut self, keys: &[String], now: DateTime<Utc>, ) -> AcquireOutcome

Attempt to consume one token from EVERY lease in keys, all-or-none: consumes from all only if all have a token (so a per-hour rate and a per-day max on the same tool both gate the call without a partial consumption when one is exhausted). Returns AcquireOutcome::Denied with the LATEST retry_at among the exhausted leases (the binding constraint — you must wait for the slowest). An empty keys (an unbudgeted effect) is granted. Unknown keys are skipped (treated as unbudgeted).

Source

pub fn available(&self, key: &str, now: DateTime<Utc>) -> Option<f64>

Tokens currently available at key (None if unregistered).

Source

pub fn tick(&mut self, now: DateTime<Utc>)

Housekeeping pass — refill/roll every registered lease to now so available snapshots are fresh. The refilling analogue of the lease kernel’s sweep. Acquisition does not depend on this (refill is lazy).

Source

pub fn snapshot(&self) -> Vec<(String, RateLeaseSnapshot)>

§Fase 72.e — snapshot every lease’s state as (key, snapshot) pairs for persistence. Deterministic order (sorted by key).

Source

pub fn restore(&mut self, snaps: &[(String, RateLeaseSnapshot)])

§Fase 72.e — restore lease states from (key, snapshot) pairs. Keys with no registered lease are skipped (a quota dropped from a re-budgeted daemon).

Trait Implementations§

Source§

impl Default for RateLeaseKernel

Source§

fn default() -> RateLeaseKernel

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

Source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more