Documentation
use crate::stream::Stream;
use std::io::Cursor;
use crate::length::Len;

impl Stream<Cursor<Vec<u8>>> {
    pub fn take_data(&mut self) -> Vec<u8> {
        let data = &mut self.inner;
        std::mem::take(data.get_mut())
    }
    pub fn align(&mut self, align: u64) -> std::io::Result<&mut Self> {
        let len = self.length()?;
        let data = &mut self.inner;
        let remainder = len % align;
        if remainder != 0 {
            let padding = align - remainder;
            data.get_mut().resize((len + padding) as usize, 0u8);
        }
        Ok(self)
    }
}
impl Into<Vec<u8>> for &mut Stream<Cursor<Vec<u8>>> {
    fn into(self) -> Vec<u8> {
        self.take_data()
    }
}
impl Into<Vec<u8>> for Stream<Cursor<Vec<u8>>> {
    fn into(mut self) -> Vec<u8> {
        let data = self.inner.get_mut();
        std::mem::take(data)
    }
}