1use std::io;
2
3
4pub trait ReadTrait {
5 fn read_vec(&mut self, size: isize) -> Result<Vec<u8>, std::io::Error>;
6}
7
8impl<R: io::Read> ReadTrait for R {
9 fn read_vec(&mut self, size: isize) -> Result<Vec<u8>, std::io::Error> {
10 let mut vec:Vec<u8> = Vec::new();
11 if size < 0 {
12 self.read_to_end(&mut vec)?;
13 }
14 else if size > 0 {
15 vec = Vec::with_capacity(size as usize);
16 unsafe {vec.set_len(size as usize);}
17 let mut buf = &mut vec[..];
18 let mut readed = 0;
19 while !buf.is_empty() {
20 match self.read(buf) {
21 Ok(0) => break,
22 Ok(n) => {
23 readed += n;
24 let tmp = buf;
25 buf = &mut tmp[n..];
26 }
27 Err(e) => return Err(e),
28 }
29 }
30 unsafe {vec.set_len(readed);}
31 }
32 return Ok(vec);
33 }
34}