use std::io::Read; use std::fs::File; use Result; use binread::BinReadable; pub struct IJVMReader { pointer: usize, source: Vec } impl IJVMReader { pub fn new(path: &str) -> Result { let file = match File::open(path) { Ok(file) => file, Err(_) => return Err("Could not open file"), }; let abc: Vec = file.bytes().map(|e| e.unwrap()).collect(); Ok(IJVMReader { pointer: 0, source: abc }) } pub fn new_from_slice(source: &[u8]) -> IJVMReader { IJVMReader { pointer: 0, source: source.to_vec(), } } } impl BinReadable for IJVMReader { fn get(&mut self) -> Result { if self.pointer >= self.source.len() { return Err("EOF reached") } let byte = self.source[self.pointer]; self.pointer += 1; Ok(byte) } fn cur(&self) -> usize { self.pointer } fn len(&self) -> usize { self.source.len() } fn slice(&mut self, len: usize) -> &[u8] { let slice = &self.source[self.pointer..self.pointer+len]; self.pointer += len; slice } }