confitul 0.1.4

ConfitUL contains utilities for ConfitDB which is an experimental, distributed, real-time database, giving full control on conflict resolution.
Documentation
use std::collections::VecDeque;

#[derive(Debug)]
pub struct SizedQueue<T> {
    size: usize,
    queue: VecDeque<T>,
}

impl<T> SizedQueue<T> {
    pub fn new(size: usize) -> Self {
        SizedQueue {
            size,
            queue: VecDeque::with_capacity(size),
        }
    }

    pub fn len(&self) -> usize {
        self.queue.len()
    }

    pub fn capacity(&self) -> usize {
        self.size
    }

    pub fn resize(&mut self, size: usize) -> usize {
        let old_size = self.queue.len();
        let dropped = if old_size > size {
            self.queue.truncate(size);
            old_size - size
        } else {
            if size > old_size {
                self.queue.try_reserve(size - old_size).ok();
            }
            0
        };

        dropped
    }

    pub fn push(&mut self, item: T) {
        if self.queue.len() < self.size {
            self.queue.push_back(item);
        } else {
            drop(item);
        }
    }

    pub fn pop(&mut self) -> Option<T> {
        self.queue.pop_front()
    }
}