nanomp3 0.1.0

Pure Rust no_std MP3 decoder. Based on minimp3
Documentation
#[derive(Debug, Clone, Copy)]
pub struct Buffer<Storage> {
    storage: Storage,
    bottom: usize,
    top: usize
}

impl<Storage> Buffer<Storage> {
    pub const fn new(storage: Storage) -> Self {
        Self {
            storage,
            bottom: 0,
            top: 0
        }
    }

    pub fn len(&self) -> usize {
        self.top - self.bottom
    }
    
    pub fn is_empty(&self) -> bool {
        self.top == self.bottom
    }

    pub fn consume(&mut self, amt: usize) {
        assert!(amt <= self.top - self.bottom);
        self.bottom += amt;
    }
}

impl<Storage: AsMut<[u8]>> Buffer<Storage> {
    pub fn reclaim(&mut self) {
        self.storage.as_mut().copy_within(self.bottom..self.top, 0);
        self.top -= self.bottom;
        self.bottom = 0;
    }

    pub fn remaining_capacity(&mut self) -> &mut [u8] {
        &mut self.storage.as_mut()[self.top..]
    }
}

impl<Storage: AsRef<[u8]>> Buffer<Storage> {
    pub fn expand(&mut self, amt: usize) {
        assert!(amt <= self.storage.as_ref().len() - self.top);
        self.top += amt;
    }

    pub fn data(&self) -> &[u8] {
        &self.storage.as_ref()[self.bottom..self.top]
    }
}