Impl PopFrom traits for u8 arrays
This commit is contained in:
parent
f5af130f2d
commit
5f238c7bc4
42
src/lib.rs
42
src/lib.rs
@ -236,6 +236,48 @@ flt_impl_pop_non_ne!(f32);
|
||||
core_impl_pop_ne!(f64);
|
||||
flt_impl_pop_non_ne!(f64);
|
||||
|
||||
impl<const SIZE: usize> PopFromNE for [u8; SIZE] {
|
||||
fn pop_ne_from(source: &mut &[u8]) -> Result<Self>
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
if source.len() < SIZE {
|
||||
anyhow::bail!("Buffer to small to pop [u8; {SIZE}]");
|
||||
}
|
||||
let value = source[..SIZE].try_into()?;
|
||||
*source = &source[SIZE..];
|
||||
Ok(value)
|
||||
}
|
||||
|
||||
fn push_ne_into<T: Pushable>(&self, dest: &mut T) -> Result<()> {
|
||||
dest.push_slice(self)
|
||||
}
|
||||
}
|
||||
impl<const SIZE: usize> PopFromLE for [u8; SIZE] {
|
||||
fn pop_le_from(source: &mut &[u8]) -> Result<Self>
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
Self::pop_ne_from(source)
|
||||
}
|
||||
|
||||
fn push_le_into<T: Pushable>(&self, dest: &mut T) -> Result<()> {
|
||||
self.push_ne_into(dest)
|
||||
}
|
||||
}
|
||||
impl<const SIZE: usize> PopFromBE for [u8; SIZE] {
|
||||
fn pop_be_from(source: &mut &[u8]) -> Result<Self>
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
Self::pop_ne_from(source)
|
||||
}
|
||||
|
||||
fn push_be_into<T: Pushable>(&self, dest: &mut T) -> Result<()> {
|
||||
self.push_ne_into(dest)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user