Struct rate_limit_queue::RateLimitQueue
source · pub struct RateLimitQueue<T> { /* private fields */ }
Expand description
A rate limited queue.
Implementations
sourceimpl<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
sourceimpl<T> Extend<T> for RateLimitQueue<T>
impl<T> Extend<T> for RateLimitQueue<T>
sourcefn extend<I: IntoIterator<Item = T>>(&mut self, iter: I)
fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I)
sourcefn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
)sourcefn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one
)