use crate::{Buffer, BufferError};
pub trait ByteIteratorIntoBuffer {
fn into_buffer(self) -> Result<Buffer, BufferError>;
}
impl<T: Iterator<Item = u8>> ByteIteratorIntoBuffer for T {
fn into_buffer(self) -> Result<Buffer, BufferError> {
let mut buffer = Buffer::with_capacity(self.size_hint().0)?;
for byte in self {
buffer.push(byte)?;
}
Ok(buffer)
}
}
pub trait ByteRefIteratorIntoBuffer {
fn into_buffer(self) -> Result<Buffer, BufferError>;
}
impl<'lt, T: Iterator<Item = &'lt u8>> ByteRefIteratorIntoBuffer for T {
fn into_buffer(self) -> Result<Buffer, BufferError> {
self.copied().into_buffer()
}
}
pub trait ByteSliceIteratorIntoBuffer {
fn into_buffer(self) -> Result<Buffer, BufferError>;
}
impl<Ts: AsRef<[u8]>, Ti: Iterator<Item = Ts>> ByteSliceIteratorIntoBuffer for Ti {
fn into_buffer(self) -> Result<Buffer, BufferError> {
let mut buffer = Buffer::new();
for bytes in self {
buffer.extend_from_slice(bytes.as_ref())?;
}
Ok(buffer)
}
}