Skip to content

Commit dae4d44

Browse files
authored
Testing (#8)
1 parent 59fc668 commit dae4d44

File tree

8 files changed

+568
-128
lines changed

8 files changed

+568
-128
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
target/
2-
Cargo.lock
2+
Cargo.lock
3+
.test/

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
edition = "2021"
33

44
name = "objstr"
5-
version = "0.1.0"
5+
version = "0.1.1"
66

77
description = "File stream abstraction for Rust"
88
repository = "https://github.com/maxmielchen/objstr-rs"

src/file/file_obj_str.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ impl ObjStr for FileObjStr {
4141
match pos {
4242
SeekFrom::Start(pos) => {
4343
jump_stream_start(&mut self.file);
44-
seek_backward_n(&mut self.file, pos)?;
44+
seek_forward_n(&mut self.file, pos)?;
4545
},
4646
SeekFrom::End(pos) => {
4747
jump_stream_end(&mut self.file);

src/file/helpers.rs

Lines changed: 153 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,68 @@
1+
use core::panic;
12
use std::{fs::File, io::{Error, ErrorKind, Read as _, Seek as _, SeekFrom, Write as _}};
23

34
pub const EMPTY: [u8; 1] = [0; 1];
45
pub const OP_LEN: u8 = 4;
56

67
pub fn write_empty_byte(file: &mut File) {
7-
file.write(&EMPTY).unwrap();
8+
let res = file.write(&EMPTY);
9+
if let Err(e) = res {
10+
panic!("Failed to write empty byte: {}", e);
11+
}
12+
if res.unwrap() != EMPTY.len() {
13+
panic!("Failed to write empty byte: {}", "Write length mismatch.");
14+
}
815
}
916

1017
pub fn cut(file: &mut File) {
1118

12-
let pos = file.seek(SeekFrom::Current(0)).unwrap();
19+
let pos = file.seek(SeekFrom::Current(0));
20+
21+
if let Err(e) = pos {
22+
panic!("Failed to cut file: {}", e);
23+
}
24+
25+
let pos = pos.unwrap();
26+
27+
let res = file.set_len(pos);
28+
29+
if let Err(e) = res {
30+
panic!("Failed to cut file: {}", e);
31+
}
1332

14-
file.set_len(pos).unwrap();
1533
write_empty_byte(file);
1634
}
1735

1836
pub fn truncate(file: &mut File) {
19-
file.set_len(0).unwrap();
37+
let res = file.set_len(0);
38+
39+
if let Err(e) = res {
40+
panic!("Failed to truncate file: {}", e);
41+
}
42+
2043
write_empty_byte(file);
2144
jump_stream_start(file);
2245
}
2346

2447
pub fn jump_stream_start(file: &mut File) {
25-
file.seek(SeekFrom::Start(0)).unwrap();
48+
let res = file.seek(SeekFrom::Start(0));
49+
50+
if let Err(e) = res {
51+
panic!("Failed to jump stream start: {}", e);
52+
}
2653
}
2754

2855
pub fn jump_stream_end(file: &mut File) {
29-
file.seek(SeekFrom::End(-1)).unwrap();
56+
let res = file.seek(SeekFrom::End(-1));
57+
58+
if let Err(e) = res {
59+
panic!("Failed to jump stream end: {}", e);
60+
}
3061
}
3162

32-
pub fn catch_stream_read(file: &mut File, read: usize, predict: usize) -> Result<(), Error> {
63+
pub fn catch_stream_read(file: &mut File, read: usize, predict: usize, fix_fn: fn(file: &mut File)) -> Result<(), Error> {
3364
if read != predict {
34-
jump_stream_start(file);
65+
fix_fn(file);
3566
return Err(
3667
Error::new(
3768
ErrorKind::UnexpectedEof,
@@ -60,7 +91,11 @@ pub fn write(file: &mut File, data: Vec<u8>) -> Result<(), Error> {
6091
obj.extend_from_slice(&data);
6192
obj.extend_from_slice(&op);
6293

63-
file.write(&obj).unwrap();
94+
let res = file.write(&obj);
95+
96+
if let Err(e) = res {
97+
panic!("Failed to write data: {}", e);
98+
}
6499

65100
Ok(())
66101
}
@@ -69,28 +104,62 @@ pub fn read(file: &mut File) -> Result<Vec<u8>, Error> {
69104

70105
let mut len_buf_left: [u8; OP_LEN as usize] = [0; OP_LEN as usize];
71106
let res = file.read(&mut len_buf_left);
107+
108+
if let Err(e) = res {
109+
panic!("Failed to read data: {}", e);
110+
}
111+
112+
let res = res.unwrap();
113+
72114
catch_stream_read(
73115
file,
74-
res?,
75-
OP_LEN as usize
116+
res,
117+
OP_LEN as usize,
118+
jump_stream_end
76119
)?;
120+
77121
let len_left = u32::from_be_bytes(len_buf_left) as usize;
78122

79123
let mut data = vec![0; len_left];
80124
let res = file.read(&mut data);
81-
catch_stream_read(
125+
126+
if let Err(e) = res {
127+
panic!("Failed to read data: {}", e);
128+
}
129+
130+
let res = res.unwrap();
131+
132+
let catch = catch_stream_read(
82133
file,
83-
res?,
84-
len_left
85-
)?;
134+
res,
135+
len_left,
136+
jump_stream_start
137+
);
138+
139+
if let Err(e) = catch {
140+
panic!("Failed to read data: {}", e);
141+
}
86142

87143
let mut len_buf_right: [u8; OP_LEN as usize] = [0; OP_LEN as usize];
88144
let res = file.read(&mut len_buf_right);
89-
catch_stream_read(
145+
146+
if let Err(e) = res {
147+
panic!("Failed to read data: {}", e);
148+
}
149+
150+
let res = res.unwrap();
151+
152+
let catch = catch_stream_read(
90153
file,
91-
res?,
92-
OP_LEN as usize
93-
)?;
154+
res,
155+
OP_LEN as usize,
156+
jump_stream_start
157+
);
158+
159+
if let Err(e) = catch {
160+
panic!("Failed to read data: {}", e);
161+
}
162+
94163
let len_right = u32::from_be_bytes(len_buf_right) as usize;
95164

96165
if len_left != len_right {
@@ -104,35 +173,79 @@ pub fn seek_forward(file: &mut File) -> Result<(), Error> {
104173
let mut len_buf: [u8; OP_LEN as usize] = [0; OP_LEN as usize];
105174

106175
let res = file.read(&mut len_buf);
176+
177+
if let Err(e) = res {
178+
panic!("Failed to read data: {}", e);
179+
}
180+
107181
catch_stream_read(
108182
file,
109183
res?,
110-
OP_LEN as usize
184+
OP_LEN as usize,
185+
jump_stream_end
111186
)?;
187+
112188
let len = u32::from_be_bytes(len_buf) as i64;
113189

114-
file.seek(SeekFrom::Current(len)).unwrap();
190+
let catch = file.seek(SeekFrom::Current(len));
115191

116-
file.seek(SeekFrom::Current(OP_LEN as i64)).unwrap();
192+
if let Err(e) = catch {
193+
panic!("Failed to seek forward: {}", e);
194+
}
195+
196+
let catch = file.seek(SeekFrom::Current(OP_LEN as i64));
197+
198+
if let Err(e) = catch {
199+
panic!("Failed to seek forward: {}", e);
200+
}
117201

118202
Ok(())
119203
}
120204

121205
pub fn seek_backward(file: &mut File) -> Result<(), Error> {
122206
let mut len_buf: [u8; OP_LEN as usize] = [0; OP_LEN as usize];
123207

124-
file.seek(SeekFrom::Current(-(OP_LEN as i64))).unwrap();
208+
let res = file.seek(SeekFrom::Current(-(OP_LEN as i64)));
209+
210+
if let Err(e) = res {
211+
if e.kind() == ErrorKind::InvalidInput {
212+
return Err(
213+
Error::new(
214+
ErrorKind::UnexpectedEof,
215+
"Reached stream start."
216+
)
217+
)
218+
}
219+
panic!("Failed to seek backward: {}", e);
220+
}
125221

126222
let res = file.read(&mut len_buf);
127-
catch_stream_read(
223+
let catch = catch_stream_read(
128224
file,
129225
res?,
130-
OP_LEN as usize
131-
)?;
226+
OP_LEN as usize,
227+
jump_stream_start
228+
);
229+
230+
if let Err(e) = catch {
231+
panic!("Failed to seek backward: {}", e);
232+
}
132233

133234
let len = u32::from_be_bytes(len_buf) as i64;
134235

135-
file.seek(SeekFrom::Current(-len -2*OP_LEN as i64))?;
236+
let res = file.seek(SeekFrom::Current(-len -2*OP_LEN as i64));
237+
238+
if let Err(e) = res {
239+
if e.kind() == ErrorKind::InvalidInput {
240+
return Err(
241+
Error::new(
242+
ErrorKind::UnexpectedEof,
243+
"Reached stream start."
244+
)
245+
)
246+
}
247+
panic!("Failed to seek backward: {}", e);
248+
}
136249

137250
Ok(())
138251
}
@@ -154,14 +267,25 @@ pub fn seek_backward_n(file: &mut File, n: u64) -> Result<(), Error> {
154267
pub fn inner_len(file: &mut File) -> Result<u32, Error> {
155268
let mut len_buf: [u8; OP_LEN as usize] = [0; OP_LEN as usize];
156269
let res = file.read(&mut len_buf);
270+
271+
if let Err(e) = res {
272+
panic!("Failed to read data: {}", e);
273+
}
274+
157275
catch_stream_read(
158276
file,
159277
res?,
160-
OP_LEN as usize
278+
OP_LEN as usize,
279+
jump_stream_end
161280
)?;
281+
162282
let len = u32::from_be_bytes(len_buf) as u32;
163283

164-
file.seek(SeekFrom::Current(-(OP_LEN as i64)))?;
284+
let res = file.seek(SeekFrom::Current(-(OP_LEN as i64)));
285+
286+
if let Err(e) = res {
287+
panic!("Failed to seek backward: {}", e);
288+
}
165289

166290
Ok(len)
167291
}

0 commit comments

Comments
 (0)