use std::borrow::Borrow; /// Iter that converts 2 `u8`s into 1 `u16` pub struct Bit16Iter where I: Iterator, ::Item: Borrow { iter: I, } impl Iterator for Bit16Iter where I: Iterator, ::Item: Borrow { type Item = u16; fn next(&mut self) -> Option { let mut c = 0u16; unsafe { if let Some(a) = self.iter.next() { crate::reinterpret::bytes_mut(&mut c)[0] = *a.borrow(); } else { return None; } if let Some(b) = self.iter.next() { crate::reinterpret::bytes_mut(&mut c)[1] = *b.borrow(); } } Some(c) } } pub trait Bit16IterExt: Iterator + Sized where ::Item: Borrow { fn into_16(self) -> Bit16Iter; } impl Bit16IterExt for I where I: Iterator, ::Item: Borrow { fn into_16(self) -> Bit16Iter { Bit16Iter{ iter: self } } }