Documentation
use crate::endian::Endian;
use crate::length::Len;
use std::io;
use std::io::{Cursor, Read, Seek, SeekFrom, Write};

#[derive(Debug)]
#[allow(dead_code)]
pub struct Stream<T> {
    pub inner: T,
    pub endian: Endian,
    pub pins: Vec<u64>,
}
impl<T> Stream<T> {
    pub fn with_endian(&mut self, endian: Endian) -> &mut Self {
        self.endian = endian;
        self
    }
}
impl<T: Default> Stream<T> {
    pub fn empty() -> Stream<T> {
        Self {
            inner: T::default(),
            endian: Endian::Little,
            pins: vec![],
        }
    }
}
#[allow(dead_code)]
impl<T> Stream<T> {
    pub fn new(inner: T) -> Stream<T> {
        Self {
            inner,
            endian: Endian::Little,
            pins: vec![],
        }
    }
}
impl<T: Seek> Seek for Stream<T> {
    fn seek(&mut self, pos: SeekFrom) -> io::Result<u64> {
        self.inner.seek(pos)
    }
}
impl<T: Read> Read for Stream<T> {
    fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
        self.inner.read(buf)
    }
}
impl<T: Write> Write for Stream<T> {
    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
        self.inner.write(buf)
    }

    fn flush(&mut self) -> io::Result<()> {
        self.inner.flush()
    }
}