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.