pub struct RateLimitBuilder { /* private fields */ }Expand description
Builder pattern implementation for creating rate limit instances.
This struct provides a convenient way to configure and create rate limit instances with various options such as clustering, custom buckets, and distributed storage. It extracts necessary dependencies from the configuration context and maintains shared references to components like clocks, storage, and locks.
Implementations§
Source§impl RateLimitBuilder
impl RateLimitBuilder
Sourcepub fn new(&self, builder_id: String) -> RateLimitBuilderInstance
pub fn new(&self, builder_id: String) -> RateLimitBuilderInstance
Creates a new builder instance for configuring a rate limiter.
§Arguments
builder_id- A string identifier for the rate limit instance.
§Returns
A new RateLimitBuilderInstance configured in local mode by default.
It allows for further configuration before building the final RateLimitInstance.
The returned instance inherits all the configuration and dependencies from this builder.
Additional methods provided:
buckets: Allows custom quotas configuration as per-policy, per-SLA, or per-user grouping.clustered: Enables distributed, cross-node rate limiting by invoking.clustered(timer)before.build(). This requires a distributed storage client and configures the limiter for quota sharing across a cluster.shared: Enables sharing the rate limit across different policy instancesbuild: Creates a newRateLimitInstance.
§Example
// Local mode (single node, in-memory):
let local_limiter = builder
.new("unique-id".to_string())
.build()?;
// Cluster mode (multi-node, distributed quota):
let custom_buckets = vec![
(
"default".to_string(),
vec![
Tier {
period_in_millis: 60000,
requests: 120,
},
],
),
];
let timer = clock.period(Duration::from_secs(5));
let cluster_limiter = builder
.new("unique-id".to_string())
.buckets(custom_buckets)
.clustered(timer)
.build()?;
// Shared mode (across policy instances):
let shared_limiter = builder
.new("unique-id".to_string())
.shared()
.build()?;Trait Implementations§
Source§impl FromContext<ConfigureContext> for RateLimitBuilder
impl FromContext<ConfigureContext> for RateLimitBuilder
type Error = Infallible
fn from_context(context: &ConfigureContext) -> Result<Self, Self::Error>
fn from_context_always(context: &C) -> Selfwhere
Self: FromContext<C, E, Error = Infallible>,
Auto Trait Implementations§
impl Freeze for RateLimitBuilder
impl !RefUnwindSafe for RateLimitBuilder
impl !Send for RateLimitBuilder
impl !Sync for RateLimitBuilder
impl Unpin for RateLimitBuilder
impl UnsafeUnpin for RateLimitBuilder
impl !UnwindSafe for RateLimitBuilder
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
Mutably borrows from an owned value. Read more