binary_rs/
lib.rs

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}