cuprate_epee_encoding/
io.rs

1use bytes::{Buf, BufMut};
2
3use crate::error::*;
4
5#[inline]
6pub(crate) fn checked_read_primitive<B: Buf, R: Sized>(
7    b: &mut B,
8    read: impl Fn(&mut B) -> R,
9) -> Result<R> {
10    checked_read(b, read, size_of::<R>())
11}
12
13#[inline]
14pub(crate) fn checked_read<B: Buf, R>(
15    b: &mut B,
16    read: impl Fn(&mut B) -> R,
17    size: usize,
18) -> Result<R> {
19    if b.remaining() < size {
20        Err(Error::IO("Not enough bytes in buffer to build object."))
21    } else {
22        Ok(read(b))
23    }
24}
25
26#[inline]
27pub(crate) fn checked_write_primitive<B: BufMut, T: Sized>(
28    b: &mut B,
29    write: impl Fn(&mut B, T),
30    t: T,
31) -> Result<()> {
32    checked_write(b, write, t, size_of::<T>())
33}
34
35#[inline]
36pub(crate) fn checked_write<B: BufMut, T>(
37    b: &mut B,
38    write: impl Fn(&mut B, T),
39    t: T,
40    size: usize,
41) -> Result<()> {
42    if b.remaining_mut() < size {
43        Err(Error::IO("Not enough capacity to write object."))
44    } else {
45        write(b, t);
46        Ok(())
47    }
48}