use error::Error; use buffer::Buffer; use sys::superblock::Superblock; /// Safe wrapper for raw sys structs pub struct Ext2> { buffer: B, superblock: Option<(Superblock, usize)>, } impl> Ext2 where Error: From, { pub fn new(buffer: B) -> Ext2 { Ext2 { buffer, superblock: None, } } pub fn init(&mut self) -> Result<(), Error> { let superblock = Superblock::find(&self.buffer); match superblock { Ok(sb) => Ok(self.superblock = Some(sb)), Err(err) => Err(err), } } } #[cfg(test)] mod tests { use std::fs::File; use std::cell::RefCell; use buffer::Buffer; use super::Ext2; #[test] fn file_len() { let file = RefCell::new(File::open("ext2.bin").unwrap()); assert_eq!(unsafe { file.slice_unchecked(1024..2048).len() }, 1024); } #[test] fn file() { let file = RefCell::new(File::open("ext2.bin").unwrap()); let mut fs = Ext2::new(file); assert_eq!(Ok(()), fs.init()); } }