use std::io;
use crate::buffer::Metadata;
pub trait Stream {
type Item: ?Sized;
fn start(&mut self) -> io::Result<()>;
fn stop(&mut self) -> io::Result<()>;
}
pub trait CaptureStream<'a>: Stream {
fn queue(&mut self, index: usize) -> io::Result<()>;
fn dequeue(&mut self) -> io::Result<usize>;
fn next(&'a mut self) -> io::Result<(&Self::Item, &Metadata)>;
}
pub trait OutputStream<'a>: Stream {
fn queue(&mut self, index: usize) -> io::Result<()>;
fn dequeue(&mut self) -> io::Result<usize>;
fn next(&'a mut self) -> io::Result<(&mut Self::Item, &mut Metadata)>;
}