1use std::{
8 io::{Read, Write},
9 mem::size_of,
10};
11
12use crate::error::Error;
13
14#[inline(always)]
15pub fn read_u8<R: Read>(reader: &mut R) -> Result<u8, Error> {
16 let mut buffer = [0x00; size_of::<u8>()];
17 reader.read_exact(&mut buffer)?;
18 Ok(u8::from_le_bytes(buffer))
19}
20
21#[inline(always)]
22pub fn read_i8<R: Read>(reader: &mut R) -> Result<i8, Error> {
23 let mut buffer = [0x00; size_of::<i8>()];
24 reader.read_exact(&mut buffer)?;
25 Ok(i8::from_le_bytes(buffer))
26}
27
28#[inline(always)]
29pub fn read_u16<R: Read>(reader: &mut R) -> Result<u16, Error> {
30 let mut buffer = [0x00; size_of::<u16>()];
31 reader.read_exact(&mut buffer)?;
32 Ok(u16::from_le_bytes(buffer))
33}
34
35#[inline(always)]
36pub fn read_i16<R: Read>(reader: &mut R) -> Result<i16, Error> {
37 let mut buffer = [0x00; size_of::<i16>()];
38 reader.read_exact(&mut buffer)?;
39 Ok(i16::from_le_bytes(buffer))
40}
41
42#[inline(always)]
43pub fn read_u32<R: Read>(reader: &mut R) -> Result<u32, Error> {
44 let mut buffer = [0x00; size_of::<u32>()];
45 reader.read_exact(&mut buffer)?;
46 Ok(u32::from_le_bytes(buffer))
47}
48
49#[inline(always)]
50pub fn read_i32<R: Read>(reader: &mut R) -> Result<i32, Error> {
51 let mut buffer = [0x00; size_of::<i32>()];
52 reader.read_exact(&mut buffer)?;
53 Ok(i32::from_le_bytes(buffer))
54}
55
56#[inline(always)]
57pub fn read_u64<R: Read>(reader: &mut R) -> Result<u64, Error> {
58 let mut buffer = [0x00; size_of::<u64>()];
59 reader.read_exact(&mut buffer)?;
60 Ok(u64::from_le_bytes(buffer))
61}
62
63#[inline(always)]
64pub fn read_i64<R: Read>(reader: &mut R) -> Result<i64, Error> {
65 let mut buffer = [0x00; size_of::<i64>()];
66 reader.read_exact(&mut buffer)?;
67 Ok(i64::from_le_bytes(buffer))
68}
69
70#[inline(always)]
71pub fn read_f32<R: Read>(reader: &mut R) -> Result<f32, Error> {
72 let mut buffer = [0x00; size_of::<f32>()];
73 reader.read_exact(&mut buffer)?;
74 Ok(f32::from_le_bytes(buffer))
75}
76
77#[inline(always)]
78pub fn read_bytes<R: Read>(reader: &mut R, count: usize) -> Result<Vec<u8>, Error> {
79 let mut buffer = vec![0; count];
80 reader.read_exact(&mut buffer)?;
81 Ok(buffer)
82}
83
84#[inline(always)]
85pub fn read_string<R: Read>(reader: &mut R, count: usize) -> Result<String, Error> {
86 let buffer = read_bytes(reader, count)?;
87 Ok(String::from_utf8(buffer)?)
88}
89
90#[inline(always)]
91pub fn read_into<R: Read>(reader: &mut R, buffer: &mut [u8]) -> Result<(), Error> {
92 reader.read_exact(buffer)?;
93 Ok(())
94}
95
96#[inline(always)]
97pub fn write_u8<W: Write>(writer: &mut W, value: u8) -> Result<(), Error> {
98 writer.write_all(&value.to_le_bytes())?;
99 Ok(())
100}
101
102#[inline(always)]
103pub fn write_i8<W: Write>(writer: &mut W, value: i8) -> Result<(), Error> {
104 writer.write_all(&value.to_le_bytes())?;
105 Ok(())
106}
107
108#[inline(always)]
109pub fn write_u16<W: Write>(writer: &mut W, value: u16) -> Result<(), Error> {
110 writer.write_all(&value.to_le_bytes())?;
111 Ok(())
112}
113
114#[inline(always)]
115pub fn write_i16<W: Write>(writer: &mut W, value: i16) -> Result<(), Error> {
116 writer.write_all(&value.to_le_bytes())?;
117 Ok(())
118}
119
120#[inline(always)]
121pub fn write_u32<W: Write>(writer: &mut W, value: u32) -> Result<(), Error> {
122 writer.write_all(&value.to_le_bytes())?;
123 Ok(())
124}
125
126#[inline(always)]
127pub fn write_i32<W: Write>(writer: &mut W, value: i32) -> Result<(), Error> {
128 writer.write_all(&value.to_le_bytes())?;
129 Ok(())
130}
131
132#[inline(always)]
133pub fn write_u64<W: Write>(writer: &mut W, value: u64) -> Result<(), Error> {
134 writer.write_all(&value.to_le_bytes())?;
135 Ok(())
136}
137
138#[inline(always)]
139pub fn write_i64<W: Write>(writer: &mut W, value: i64) -> Result<(), Error> {
140 writer.write_all(&value.to_le_bytes())?;
141 Ok(())
142}
143
144#[inline(always)]
145pub fn write_f32<W: Write>(writer: &mut W, value: f32) -> Result<(), Error> {
146 writer.write_all(&value.to_le_bytes())?;
147 Ok(())
148}
149
150#[inline(always)]
151pub fn write_bytes<W: Write>(writer: &mut W, value: &[u8]) -> Result<(), Error> {
152 writer.write_all(value)?;
153 Ok(())
154}
155
156#[inline(always)]
157pub fn write_string<W: Write>(writer: &mut W, value: &str) -> Result<(), Error> {
158 write_bytes(writer, value.as_bytes())
159}