OpenAgentID documentation
Source referencesRust module referencearsenal-core

arsenal-core · limits

Declared module signatures, types, configuration, and source documentation.

Source: arsenal/crates/arsenal-core/src/limits.rs. SHA-256: e6e5774acca5a12d8950c25c74538fd483f78dc775f91008537bf9cd3f8561d9.

This source reference follows declared modules and preserves feature attributes. It includes public declarations and implementation methods in those modules. Private-module exports and trait resolution still require the compiler; not every declaration is a crate-root import. Function bodies and constant values are omitted. Source comments describe their implementation context and are not a production deployment claim.

limits::RateLimits

Rate limiting configuration

Equality is derived so that a round trip through the canonical ACT encoding can be checked for loss: these limits cross the wire as an issuer-defined extension claim, and a silently dropped ceiling is the failure mode that matters.

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct RateLimits {
/// Maximum requests per second

#[serde(skip_serializing_if = "Option::is_none")]
pub requests_per_second: Option<u32>,
/// Maximum requests per minute

#[serde(skip_serializing_if = "Option::is_none")]
pub requests_per_minute: Option<u32>,
/// Maximum requests per hour

#[serde(skip_serializing_if = "Option::is_none")]
pub requests_per_hour: Option<u32>,
/// Maximum concurrent requests

#[serde(skip_serializing_if = "Option::is_none")]
pub max_concurrent: Option<u32>,
/// Maximum request body size in bytes

#[serde(skip_serializing_if = "Option::is_none")]
pub max_request_size: Option<u64>,
/// Maximum response size in bytes

#[serde(skip_serializing_if = "Option::is_none")]
pub max_response_size: Option<u64>
}

Source line: 19.

limits::RateLimits::unlimited

Create unlimited rate limits (use with caution)

#[must_use]
pub fn unlimited() -> Self;

Source line: 56.

limits::RateLimits::strict

Create strict rate limits

#[must_use]
pub fn strict() -> Self;

Source line: 69.

limits::RateLimits::merge

Merge with another rate limit configuration (take the more restrictive)

#[must_use]
pub fn merge(&self, other: &RateLimits) -> RateLimits;

Source line: 82.

limits::UsageBudget

Usage budget for a capability token

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UsageBudget {
/// Maximum total requests allowed

#[serde(skip_serializing_if = "Option::is_none")]
pub max_requests: Option<u64>,
/// Maximum total bytes transferred

#[serde(skip_serializing_if = "Option::is_none")]
pub max_bytes: Option<u64>,
/// Maximum total cost units (for metered APIs)

#[serde(skip_serializing_if = "Option::is_none")]
pub max_cost_units: Option<u64>,
/// Maximum secret unwrap operations

#[serde(skip_serializing_if = "Option::is_none")]
pub max_secret_unwraps: Option<u32>,
/// Maximum delegation depth

#[serde(skip_serializing_if = "Option::is_none")]
pub max_delegation_depth: Option<u8>
}

Source line: 102.

limits::UsageBudget::unlimited

Create unlimited budget (use with caution)

#[must_use]
pub fn unlimited() -> Self;

Source line: 135.

limits::UsageBudget::minimal

Create a minimal budget for testing

#[must_use]
pub fn minimal() -> Self;

Source line: 147.

limits::UsageBudget::merge

Merge with another budget (take the more restrictive)

#[must_use]
pub fn merge(&self, other: &UsageBudget) -> UsageBudget;

Source line: 159.

limits::UsageTracker

Runtime usage tracker for enforcing limits

#[derive(Debug)]
pub struct UsageTracker {

}

Source line: 175.

limits::UsageTracker::new

Create a new usage tracker with the given budget

#[must_use]
pub fn new(budget: UsageBudget) -> Self;

Source line: 193.

limits::UsageTracker::record_request

Record a request and check if within budget

Errors

Returns an error if the budget would be exceeded

pub fn record_request(&self) -> ArsenalResult<()>;

Source line: 208.

limits::UsageTracker::record_bytes

Record bytes transferred and check if within budget

Errors

Returns an error if the budget would be exceeded

pub fn record_bytes(&self, bytes: u64) -> ArsenalResult<()>;

Source line: 226.

limits::UsageTracker::record_cost

Record cost units and check if within budget

Errors

Returns an error if the budget would be exceeded

pub fn record_cost(&self, units: u64) -> ArsenalResult<()>;

Source line: 244.

limits::UsageTracker::record_secret_unwrap

Record a secret unwrap and check if within budget

Errors

Returns an error if the budget would be exceeded

pub fn record_secret_unwrap(&self) -> ArsenalResult<()>;

Source line: 262.

limits::UsageTracker::get_stats

Get current usage statistics

#[must_use]
pub fn get_stats(&self) -> UsageStats;

Source line: 278.

limits::UsageTracker::remaining

Get remaining budget

#[must_use]
pub fn remaining(&self) -> RemainingBudget;

Source line: 290.

limits::UsageStats

Current usage statistics

#[derive(Debug, Clone)]
pub struct UsageStats {
/// Total requests made

pub request_count: u64,
/// Total bytes transferred

pub bytes_transferred: u64,
/// Total cost units consumed

pub cost_units: u64,
/// Total secret unwraps

pub secret_unwraps: u64,
/// Time elapsed since tracking started

pub elapsed: Duration
}

Source line: 315.

limits::RemainingBudget

Remaining budget

#[derive(Debug, Clone)]
pub struct RemainingBudget {
/// Remaining requests (None if unlimited)

pub requests: Option<u64>,
/// Remaining bytes (None if unlimited)

pub bytes: Option<u64>,
/// Remaining cost units (None if unlimited)

pub cost_units: Option<u64>,
/// Remaining secret unwraps (None if unlimited)

pub secret_unwraps: Option<u64>
}

Source line: 330.

limits::TokenBucketLimiter

Token bucket rate limiter for per-second/minute/hour limits

#[derive(Debug)]
pub struct TokenBucketLimiter {

}

Source line: 343.

limits::TokenBucketLimiter::new

Create a new token bucket limiter

#[must_use]
pub fn new(max_tokens: u64, refill_amount: u64, refill_interval: Duration) -> Self;

Source line: 361.

limits::TokenBucketLimiter::per_second

Create a limiter for requests per second

#[must_use]
pub fn per_second(rate: u32) -> Self;

Source line: 374.

limits::TokenBucketLimiter::per_minute

Create a limiter for requests per minute

#[must_use]
pub fn per_minute(rate: u32) -> Self;

Source line: 380.

limits::TokenBucketLimiter::per_hour

Create a limiter for requests per hour

#[must_use]
pub fn per_hour(rate: u32) -> Self;

Source line: 386.

limits::TokenBucketLimiter::try_acquire

Try to acquire a token

Errors

Returns an error if rate limited

pub fn try_acquire(&self) -> ArsenalResult<()>;

Source line: 394.

limits::TokenBucketLimiter::available

Get current available tokens

#[must_use]
pub fn available(&self) -> u64;

Source line: 450.

limits::CompositeRateLimiter

Composite rate limiter combining multiple time windows

#[derive(Debug)]
pub struct CompositeRateLimiter {

}

Source line: 457.

limits::CompositeRateLimiter::from_limits

Create from rate limits configuration

#[must_use]
pub fn from_limits(limits: &RateLimits) -> Self;

Source line: 473.

limits::CompositeRateLimiter::try_acquire

Try to acquire permission for a request

Errors

Returns an error if any rate limit is exceeded

pub fn try_acquire(&self) -> ArsenalResult<RateLimitGuard>;

Source line: 491.

limits::RateLimitGuard

Guard that releases concurrent slot on drop

#[derive(Debug)]
pub struct RateLimitGuard {

}

Source line: 537.

On this page