#![cfg_attr(feature = "unstable", feature(test))]
use std::io::{Read, Result};
use std::iter::Fuse;
pub trait IterReadItem {
type Buffer: Default;
fn read<I: Iterator<Item=Self>>(target: &mut [u8], it: &mut I, buf: &mut Self::Buffer)
-> Result<usize> where Self: Sized;
}
pub struct IterRead<E: IterReadItem, I: Iterator<Item=E>> {
iter: Fuse<I>,
buf: E::Buffer,
}
impl<E: IterReadItem, I: Iterator<Item=E>> IterRead<E, I> {
pub fn new(iter: I) -> IterRead<E, I> {
IterRead { iter: iter.fuse(), buf: Default::default() }
}
pub fn into_inner(self) -> Fuse<I> {
self.iter
}
}
impl<E: IterReadItem, I: Iterator<Item=E>> Read for IterRead<E, I> {
fn read(&mut self, buf: &mut [u8]) -> Result<usize> {
E::read(buf, &mut self.iter, &mut self.buf)
}
}
mod impls;
#[cfg(test)]
mod tests;