pub struct RateLimitQueue<T> { /* private fields */ }
Expand description
A rate limited queue.
Implementations§
Source§impl<T> RateLimitQueue<T>
impl<T> RateLimitQueue<T>
Sourcepub fn new(quantum: usize, interval: Duration) -> RateLimitQueue<T>
pub fn new(quantum: usize, interval: Duration) -> RateLimitQueue<T>
Creates an empty queue.
§Examples
use rate_limit_queue::RateLimitQueue;
let queue: RateLimitQueue<i32> = RateLimitQueue::new(100, Duration::from_secs(1));
Sourcepub fn with_capacity(
cap: usize,
quantum: usize,
interval: Duration,
) -> RateLimitQueue<T>
pub fn with_capacity( cap: usize, quantum: usize, interval: Duration, ) -> RateLimitQueue<T>
Creates an empty queue with space for at least n
elements.
§Examples
use rate_limit_queue::RateLimitQueue;
let queue: RateLimitQueue<u32> = RateLimitQueue::with_capacity(10, 100, Duration::from_secs(1));
Sourcepub fn capacity(&mut self) -> usize
pub fn capacity(&mut self) -> usize
Returns the number of elements the queue can hold without reallocating.
Sourcepub fn reserve_exact(&mut self, additional: usize)
pub fn reserve_exact(&mut self, additional: usize)
Reserves the minimum capacity for exactly additional
more elements.
§Panics
Panics if the new capacity overflows usize
.
Sourcepub fn reserve(&mut self, additional: usize)
pub fn reserve(&mut self, additional: usize)
Reserves capacity for at least additional
more elements.
§Panics
Panics if the new capacity overflows usize
.
Sourcepub fn shrink_to_fit(&mut self)
pub fn shrink_to_fit(&mut self)
Shrinks the capacity of the queue as much as possible.
Sourcepub fn truncate(&mut self, len: usize)
pub fn truncate(&mut self, len: usize)
Shortens the queue, dropping excess elements from the back.
Sourcepub fn set_quantum(&mut self, quantum: usize)
pub fn set_quantum(&mut self, quantum: usize)
Changes the quantum.
Sourcepub fn set_interval(&mut self, interval: Duration)
pub fn set_interval(&mut self, interval: Duration)
Changes the interval.
Sourcepub fn enqueue(&mut self, value: T)
pub fn enqueue(&mut self, value: T)
Appends an element to the back of the queue.
§Examples
use rate_limit_queue::RateLimitQueue;
let mut queue = RateLimitQueue::new(100, Duration::from_secs(1));
queue.enqueue(1);
queue.enqueue(2);
Sourcepub fn dequeue(&mut self) -> Option<T>
pub fn dequeue(&mut self) -> Option<T>
Removes the first element and returns it, or None
if the queue is empty.
Sleeps if the limit has been reached.
§Examples
use rate_limit_queue::RateLimitQueue;
let mut queue = RateLimitQueue::new(100, Duration::from_secs(1));
queue.enqueue(1);
queue.enqueue(2);
assert_eq!(queue.dequeue(), Some(1));
assert_eq!(queue.dequeue(), Some(2));
Sourcepub fn try_dequeue(&mut self) -> DequeueResult<T>
pub fn try_dequeue(&mut self) -> DequeueResult<T>
Tries to remove the first element and return it.
§Examples
use rate_limit_queue::{RateLimitQueue, DequeueResult};
let mut queue = RateLimitQueue::new(2, Duration::from_secs(10));
queue.enqueue(1);
queue.enqueue(2);
assert_eq!(queue.try_dequeue(), DequeueResult::Data(1));
assert_eq!(queue.try_dequeue(), DequeueResult::Data(2));
assert_eq!(queue.try_dequeue(), DequeueResult::Empty);
queue.enqueue(3);
assert!(queue.try_dequeue().is_limit());
Sourcepub fn iter(&mut self) -> impl Iterator<Item = &T>
pub fn iter(&mut self) -> impl Iterator<Item = &T>
Returns a front-to-back iterator.
§Examples
use rate_limit_queue::{RateLimitQueue, DequeueResult};
let mut queue = RateLimitQueue::new(2, Duration::from_secs(10));
queue.enqueue(1);
queue.enqueue(2);
let b: &[_] = &[&1, &2];
let c: Vec<&i32> = queue.iter().collect();
assert_eq!(&c[..], b);
Sourcepub fn iter_mut(&mut self) -> impl Iterator<Item = &mut T>
pub fn iter_mut(&mut self) -> impl Iterator<Item = &mut T>
Returns a front-to-back iterator that returns mutable references.
§Examples
use rate_limit_queue::{RateLimitQueue, DequeueResult};
let mut queue = RateLimitQueue::new(2, Duration::from_secs(10));
queue.enqueue(1);
queue.enqueue(2);
let b: &[_] = &[&mut 1, &mut 2];
let c: Vec<&mut i32> = queue.iter_mut().collect();
assert_eq!(&c[..], b);
Trait Implementations§
Source§impl<T> Extend<T> for RateLimitQueue<T>
impl<T> Extend<T> for RateLimitQueue<T>
Source§fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I)
fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I)
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one
)