bytey_byte_buffer 0.3.0

Bytey ByteBuffer code, use Bytey instead
Documentation
use crate::{
    byte_buffer::ByteBuffer,
    byte_buffer_read::ByteBufferRead,
    error::{ByteBufferError, Result},
};
use std::time::Duration;

impl ByteBufferRead for Duration {
    #[inline]
    fn read_from_bytey_buffer(buffer: &mut ByteBuffer) -> Result<Self> {
        let secs = buffer.read::<u64>()?;
        let nanos = buffer.read::<u32>()?;

        new_duration(secs, nanos)
    }

    #[inline]
    fn read_from_bytey_buffer_le(buffer: &mut ByteBuffer) -> Result<Self> {
        let secs = buffer.read_le::<u64>()?;
        let nanos = buffer.read_le::<u32>()?;

        new_duration(secs, nanos)
    }

    #[inline]
    fn read_from_bytey_buffer_be(buffer: &mut ByteBuffer) -> Result<Self> {
        let secs = buffer.read_be::<u64>()?;
        let nanos = buffer.read_be::<u32>()?;

        new_duration(secs, nanos)
    }
}

fn new_duration(secs: u64, nanos: u32) -> Result<Duration> {
    if secs
        .checked_add(u64::from(nanos) / 1_000_000_000u64)
        .is_none()
    {
        return Err(ByteBufferError::OtherError {
            error: format!("Invalid Duration: secs: {} nanos: {}", secs, nanos),
        });
    }

    Ok(Duration::new(secs, nanos))
}