cuprate_epee_encoding/
io.rs1use 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}