1use std::io::{Result, Error, ErrorKind};
2use bytes::Buf;
3
4pub trait BufExt: Buf {
7 fn read_u8(&mut self) -> Result<u8> {
9 if self.remaining() >= 1 {
10 Ok(self.get_u8())
11 } else {
12 Err(Error::new(ErrorKind::UnexpectedEof, "self.remaining() < 1"))
13 }
14 }
15
16 fn read_u16_be(&mut self) -> Result<u16> {
18 if self.remaining() >= 2 {
19 Ok(self.get_u16_be())
20 } else {
21 Err(Error::new(ErrorKind::UnexpectedEof, "self.remaining() < 2"))
22 }
23 }
24
25 fn read_u32_be(&mut self) -> Result<u32> {
27 if self.remaining() >= 4 {
28 Ok(self.get_u32_be())
29 } else {
30 Err(Error::new(ErrorKind::UnexpectedEof, "self.remaining() < 4"))
31 }
32 }
33
34 fn read_u64_be(&mut self) -> Result<u64> {
36 if self.remaining() >= 8 {
37 Ok(self.get_u64_be())
38 } else {
39 Err(Error::new(ErrorKind::UnexpectedEof, "self.remaining() < 8"))
40 }
41 }
42
43 fn read_i8(&mut self) -> Result<i8> {
45 if self.remaining() >= 1 {
46 Ok(self.get_i8())
47 } else {
48 Err(Error::new(ErrorKind::UnexpectedEof, "self.remaining() < 1"))
49 }
50 }
51
52 fn read_i16_be(&mut self) -> Result<i16> {
54 if self.remaining() >= 2 {
55 Ok(self.get_i16_be())
56 } else {
57 Err(Error::new(ErrorKind::UnexpectedEof, "self.remaining() < 2"))
58 }
59 }
60
61 fn read_i32_be(&mut self) -> Result<i32> {
63 if self.remaining() >= 4 {
64 Ok(self.get_i32_be())
65 } else {
66 Err(Error::new(ErrorKind::UnexpectedEof, "self.remaining() < 4"))
67 }
68 }
69
70 fn read_i64_be(&mut self) -> Result<i64> {
72 if self.remaining() >= 8 {
73 Ok(self.get_i64_be())
74 } else {
75 Err(Error::new(ErrorKind::UnexpectedEof, "self.remaining() < 8"))
76 }
77 }
78
79 fn read_f64_be(&mut self) -> Result<f64> {
81 if self.remaining() >= 8 {
82 Ok(self.get_f64_be())
83 } else {
84 Err(Error::new(ErrorKind::UnexpectedEof, "self.remaining() < 8"))
85 }
86 }
87}
88
89impl<B: Buf> BufExt for B {}