Maraiah/src/durandal/chunk.rs

33 lines
542 B
Rust

//! Traits for data which can be read as a sized array.
use crate::durandal::err::*;
pub trait Chunked<T>
{
const SIZE_CHUNK: usize;
fn read(b: &[u8]) -> ResultS<T>;
}
pub trait Chunker<T>
{
fn chunk(b: &[u8]) -> ResultS<T>;
}
impl<T: Chunked<T>> Chunker<Vec<T>> for T
{
fn chunk(b: &[u8]) -> ResultS<Vec<T>>
{
let mut v = Vec::with_capacity(b.len() / T::SIZE_CHUNK);
let mut p = 0;
while p < b.len() {
v.push(T::read(&b[p..])?);
p += T::SIZE_CHUNK;
}
Ok(v)
}
}
// EOF