feat: use cursors instead of byte arrays
This commit is contained in:
+40
@@ -0,0 +1,40 @@
|
||||
use std::io::{Cursor, Read};
|
||||
|
||||
pub trait CursorExt {
|
||||
fn read_u8(&mut self) -> anyhow::Result<u8>;
|
||||
fn read_u16(&mut self) -> anyhow::Result<u16>;
|
||||
fn read_u32(&mut self) -> anyhow::Result<u32>;
|
||||
fn read_bytes(&mut self, len: usize) -> anyhow::Result<Vec<u8>>;
|
||||
fn read_string(&mut self, len: usize) -> anyhow::Result<String>;
|
||||
}
|
||||
|
||||
impl CursorExt for Cursor<&[u8]> {
|
||||
fn read_u8(&mut self) -> anyhow::Result<u8> {
|
||||
let mut result = [0u8; 1];
|
||||
self.read_exact(&mut result)?;
|
||||
Ok(result[0])
|
||||
}
|
||||
|
||||
fn read_u16(&mut self) -> anyhow::Result<u16> {
|
||||
let mut result = [0u8; 2];
|
||||
self.read_exact(&mut result)?;
|
||||
Ok(u16::from_be_bytes(result))
|
||||
}
|
||||
|
||||
fn read_u32(&mut self) -> anyhow::Result<u32> {
|
||||
let mut result = [0u8; 4];
|
||||
self.read_exact(&mut result)?;
|
||||
Ok(u32::from_be_bytes(result))
|
||||
}
|
||||
|
||||
fn read_bytes(&mut self, len: usize) -> anyhow::Result<Vec<u8>> {
|
||||
let mut result = vec![0u8; len];
|
||||
self.read_exact(&mut result)?;
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
fn read_string(&mut self, len: usize) -> anyhow::Result<String> {
|
||||
let result = self.read_bytes(len)?;
|
||||
Ok(String::from_utf8_lossy(&result).to_string())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user