1extern crate bincode;
2
3use bincode::{deserialize, deserialize_from, serialize};
4use std::fs;
5use std::io::prelude::*;
6use std::io::SeekFrom;
7
8pub struct BinaryReader {
9 file: fs::File,
10}
11
12impl BinaryReader {
13 pub fn new(filepath: &str) -> BinaryReader {
14 let file = fs::File::open(filepath);
15
16 if !file.is_ok() {
17 panic!("Failed to open file: {}", filepath);
18 }
19 let file = file.unwrap();
20
21 BinaryReader { file: file }
22 }
23
24 pub fn seek_to(&mut self, position: u64) -> u64 {
25 self.file.seek(SeekFrom::Start(position)).unwrap()
26 }
27
28 pub fn get_cur_pos(&mut self) -> u64 {
29 self.file.seek(SeekFrom::Current(0)).unwrap()
30 }
31
32 pub fn read_string(&mut self) -> String {
33 deserialize_from(&self.file).unwrap()
34 }
35
36 pub fn read_u64(&mut self) -> u64 {
37 let mut buffer: Vec<u8> = vec![0; 8];
38
39 self.file.read(&mut buffer).unwrap();
40
41 let value: u64 = deserialize(&buffer).unwrap();
42
43 value
44 }
45
46 pub fn read_i64(&mut self) -> i64 {
47 let mut buffer: Vec<u8> = vec![0; 8];
48
49 self.file.read(&mut buffer).unwrap();
50
51 let value: i64 = deserialize(&buffer).unwrap();
52
53 value
54 }
55
56 pub fn read_u32(&mut self) -> u32 {
57 let mut buffer: Vec<u8> = vec![0; 4];
58
59 self.file.read(&mut buffer).unwrap();
60
61 let value: u32 = deserialize(&buffer).unwrap();
62
63 value
64 }
65
66 pub fn read_i32(&mut self) -> i32 {
67 let mut buffer: Vec<u8> = vec![0; 4];
68
69 self.file.read(&mut buffer).unwrap();
70
71 let value: i32 = deserialize(&buffer).unwrap();
72
73 value
74 }
75
76 pub fn read_u16(&mut self) -> u16 {
77 let mut buffer: Vec<u8> = vec![0; 2];
78
79 self.file.read(&mut buffer).unwrap();
80
81 let value: u16 = deserialize(&buffer).unwrap();
82
83 value
84 }
85
86 pub fn read_i16(&mut self) -> i16 {
87 let mut buffer: Vec<u8> = vec![0; 2];
88
89 self.file.read(&mut buffer).unwrap();
90
91 let value: i16 = deserialize(&buffer).unwrap();
92
93 value
94 }
95
96 pub fn read_u8(&mut self) -> u8 {
97 let mut buffer: Vec<u8> = vec![0; 1];
98
99 self.file.read(&mut buffer).unwrap();
100
101 let value: u8 = deserialize(&buffer).unwrap();
102
103 value
104 }
105
106 pub fn read_i8(&mut self) -> i8 {
107 let mut buffer: Vec<u8> = vec![0; 1];
108
109 self.file.read(&mut buffer).unwrap();
110
111 let value: i8 = deserialize(&buffer).unwrap();
112
113 value
114 }
115}
116
117pub struct BinaryWriter {
118 file: fs::File,
119}
120
121impl BinaryWriter {
122 pub fn new(filepath: &str) -> BinaryWriter {
123 let file = fs::File::open(filepath);
124
125 if !file.is_ok() {
126 panic!("Failed to open file: {}", filepath);
127 }
128 let file = file.unwrap();
129
130 BinaryWriter { file: file }
131 }
132
133 pub fn seek_to(&mut self, position: u64) -> u64 {
134 self.file.seek(SeekFrom::Start(position)).unwrap()
135 }
136
137 pub fn get_cur_pos(&mut self) -> u64 {
138 self.file.seek(SeekFrom::Current(0)).unwrap()
139 }
140
141 pub fn write_string(&mut self, value: String) {
142 let data: Vec<u8> = serialize(&value).unwrap();
143 self.file.write(&data).unwrap();
144 }
145
146 pub fn write_u64(&mut self, value: u64) {
147 let data: Vec<u8> = serialize(&value).unwrap();
148 self.file.write(&data).unwrap();
149 }
150
151 pub fn write_i64(&mut self, value: i64) {
152 let data: Vec<u8> = serialize(&value).unwrap();
153 self.file.write(&data).unwrap();
154 }
155
156 pub fn write_u32(&mut self, value: u32) {
157 let data: Vec<u8> = serialize(&value).unwrap();
158 self.file.write(&data).unwrap();
159 }
160
161 pub fn write_i32(&mut self, value: i32) {
162 let data: Vec<u8> = serialize(&value).unwrap();
163 self.file.write(&data).unwrap();
164 }
165
166 pub fn write_u16(&mut self, value: u16) {
167 let data: Vec<u8> = serialize(&value).unwrap();
168 self.file.write(&data).unwrap();
169 }
170
171 pub fn write_i16(&mut self, value: i16) {
172 let data: Vec<u8> = serialize(&value).unwrap();
173 self.file.write(&data).unwrap();
174 }
175
176 pub fn write_u8(&mut self, value: u8) {
177 let data: Vec<u8> = serialize(&value).unwrap();
178 self.file.write(&data).unwrap();
179 }
180
181 pub fn write_i8(&mut self, value: i8) {
182 let data: Vec<u8> = serialize(&value).unwrap();
183 self.file.write(&data).unwrap();
184 }
185}