cuprate-hinto-janai/net/epee-encoding/src/io.rs

49 lines
988 B
Rust
Raw Normal View History

2024-01-29 22:32:16 +00:00
use bytes::{Buf, BufMut};
use crate::error::*;
#[inline]
pub(crate) fn checked_read_primitive<B: Buf, R: Sized>(
2024-01-29 22:32:16 +00:00
b: &mut B,
read: impl Fn(&mut B) -> R,
) -> Result<R> {
checked_read(b, read, size_of::<R>())
2024-01-29 22:32:16 +00:00
}
#[inline]
pub(crate) fn checked_read<B: Buf, R>(
b: &mut B,
read: impl Fn(&mut B) -> R,
size: usize,
) -> Result<R> {
2024-01-29 22:32:16 +00:00
if b.remaining() < size {
Err(Error::IO("Not enough bytes in buffer to build object."))
} else {
Ok(read(b))
2024-01-29 22:32:16 +00:00
}
}
#[inline]
pub(crate) fn checked_write_primitive<B: BufMut, T: Sized>(
2024-01-29 22:32:16 +00:00
b: &mut B,
write: impl Fn(&mut B, T),
t: T,
) -> Result<()> {
checked_write(b, write, t, size_of::<T>())
2024-01-29 22:32:16 +00:00
}
#[inline]
pub(crate) fn checked_write<B: BufMut, T>(
2024-01-29 22:32:16 +00:00
b: &mut B,
write: impl Fn(&mut B, T),
t: T,
size: usize,
) -> Result<()> {
if b.remaining_mut() < size {
Err(Error::IO("Not enough capacity to write object."))
} else {
write(b, t);
Ok(())
2024-01-29 22:32:16 +00:00
}
}