use bytes::Buf;
use std::io::{Error, ErrorKind, Result};
pub trait BufExt: Buf {
fn read_u8(&mut self) -> Result<u8> {
if self.remaining() >= 1 {
Ok(self.get_u8())
} else {
Err(Error::new(ErrorKind::UnexpectedEof, "self.remaining() < 1"))
}
}
fn read_u16_be(&mut self) -> Result<u16> {
if self.remaining() >= 2 {
Ok(self.get_u16())
} else {
Err(Error::new(ErrorKind::UnexpectedEof, "self.remaining() < 2"))
}
}
fn read_u32_be(&mut self) -> Result<u32> {
if self.remaining() >= 4 {
Ok(self.get_u32())
} else {
Err(Error::new(ErrorKind::UnexpectedEof, "self.remaining() < 4"))
}
}
fn read_u64_be(&mut self) -> Result<u64> {
if self.remaining() >= 8 {
Ok(self.get_u64())
} else {
Err(Error::new(ErrorKind::UnexpectedEof, "self.remaining() < 8"))
}
}
fn read_i8(&mut self) -> Result<i8> {
if self.remaining() >= 1 {
Ok(self.get_i8())
} else {
Err(Error::new(ErrorKind::UnexpectedEof, "self.remaining() < 1"))
}
}
fn read_i16_be(&mut self) -> Result<i16> {
if self.remaining() >= 2 {
Ok(self.get_i16())
} else {
Err(Error::new(ErrorKind::UnexpectedEof, "self.remaining() < 2"))
}
}
fn read_i32_be(&mut self) -> Result<i32> {
if self.remaining() >= 4 {
Ok(self.get_i32())
} else {
Err(Error::new(ErrorKind::UnexpectedEof, "self.remaining() < 4"))
}
}
fn read_i64_be(&mut self) -> Result<i64> {
if self.remaining() >= 8 {
Ok(self.get_i64())
} else {
Err(Error::new(ErrorKind::UnexpectedEof, "self.remaining() < 8"))
}
}
fn read_f32_be(&mut self) -> Result<f32> {
if self.remaining() >= 4 {
Ok(self.get_f32())
} else {
Err(Error::new(ErrorKind::UnexpectedEof, "self.remaining() < 4"))
}
}
fn read_f64_be(&mut self) -> Result<f64> {
if self.remaining() >= 8 {
Ok(self.get_f64())
} else {
Err(Error::new(ErrorKind::UnexpectedEof, "self.remaining() < 8"))
}
}
}
impl<B: Buf> BufExt for B {}