liverust_lib/netio/
bytes_reader.rs1use super::bytes_errors::{BytesReadError, BytesReadErrorValue};
2use byteorder::{ByteOrder, ReadBytesExt};
3use bytes::BytesMut;
4use std::io;
5use std::io::Cursor;
6use std::time::Duration;
7
8use tokio::{prelude::*, stream::StreamExt, time::timeout};
9use tokio_util::codec::BytesCodec;
10use tokio_util::codec::Framed;
11
12pub struct BytesReader {
13 buffer: BytesMut,
14}
15impl BytesReader {
16 pub fn new(input: BytesMut) -> Self {
17 Self { buffer: input }
18 }
19
20 pub fn extend_from_slice(&mut self, extend: &[u8]) {
27 self.buffer.extend_from_slice(extend)
28 }
29 pub fn read_bytes(&mut self, bytes_num: usize) -> Result<BytesMut, BytesReadError> {
30 if self.buffer.len() < bytes_num {
31 return Err(BytesReadError {
32 value: BytesReadErrorValue::NotEnoughBytes,
33 });
34 }
35 Ok(self.buffer.split_to(bytes_num))
36 }
37
38 pub fn advance_bytes(&mut self, bytes_num: usize) -> Result<BytesMut, BytesReadError> {
39 if self.buffer.len() < bytes_num {
40 return Err(BytesReadError {
41 value: BytesReadErrorValue::NotEnoughBytes,
42 });
43 }
44
45 Ok(self.buffer.clone().split_to(bytes_num))
47 }
48
49 pub fn read_bytes_cursor(&mut self, bytes_num: usize) -> Result<Cursor<BytesMut>, BytesReadError> {
50 let tmp_bytes = self.read_bytes(bytes_num)?;
51 let tmp_cursor = Cursor::new(tmp_bytes);
52 Ok(tmp_cursor)
53 }
54
55 pub fn advance_bytes_cursor(
56 &mut self,
57 bytes_num: usize,
58 ) -> Result<Cursor<BytesMut>, BytesReadError> {
59 let tmp_bytes = self.advance_bytes(bytes_num)?;
60 let tmp_cursor = Cursor::new(tmp_bytes);
61 Ok(tmp_cursor)
62 }
63
64 pub fn read_u8(&mut self) -> Result<u8, BytesReadError> {
65 let mut cursor = self.read_bytes_cursor(1)?;
66
67 Ok(cursor.read_u8()?)
68 }
69
70 pub fn advance_u8(&mut self) -> Result<u8, BytesReadError> {
71 let mut cursor = self.advance_bytes_cursor(1)?;
72 Ok(cursor.read_u8()?)
73 }
74
75 pub fn read_u16<T: ByteOrder>(&mut self) -> Result<u16, BytesReadError> {
76 let mut cursor = self.read_bytes_cursor(2)?;
77 let val = cursor.read_u16::<T>()?;
78 Ok(val)
79 }
80
81 pub fn read_u24<T: ByteOrder>(&mut self) -> Result<u32, BytesReadError> {
82 let mut cursor = self.read_bytes_cursor(3)?;
83 let val = cursor.read_u24::<T>()?;
84 Ok(val)
85 }
86
87 pub fn advance_u24<T: ByteOrder>(&mut self) -> Result<u32, BytesReadError> {
88 let mut cursor = self.advance_bytes_cursor(3)?;
89 Ok(cursor.read_u24::<T>()?)
90 }
91
92 pub fn read_u32<T: ByteOrder>(&mut self) -> Result<u32, BytesReadError> {
93 let mut cursor = self.read_bytes_cursor(4)?;
94 let val = cursor.read_u32::<T>()?;
95
96 Ok(val)
97 }
98
99 pub fn read_f64<T: ByteOrder>(&mut self) -> Result<f64, BytesReadError> {
100 let mut cursor = self.read_bytes_cursor(8)?;
101 let val = cursor.read_f64::<T>()?;
102
103 Ok(val)
104 }
105}
106