use crate::Disk; /// driver disk pub struct DrvDisk { disk: Disk, } impl DrvDisk { ///initialize the disk ok the current driver pub fn init_drv_disk(disk: Disk) -> DrvDisk { DrvDisk { disk: disk } } /// read inside the disk /// /// ### Parameters /// /// - **self** driver disk /// - **sector_number** sector where to read the data /// - **data** where the readed data will be stored pub fn read_sector(&mut self, sector_number: i32, data: &mut [u8]) { match Disk::read_request(&mut self.disk, sector_number, data) { Err(e) => println!("{:?}", e), _ => (), } } /// write inside the disk /// /// ### Parameters /// /// - **self** driver disk /// - **sector_number** sector where to write the data /// - **data** where the data to write is stored pub fn write_sector(&mut self, sector_number: i32, data: &[u8]) { match Disk::write_request(&mut self.disk, sector_number, data) { Err(e) => println!("{:?}", e), _ => (), } } } #[cfg(test)] mod test { use serial_test::serial; use super::DrvDisk; use crate::Disk; #[test] #[serial] fn test_init_driver() { let disk = Disk::init_disk(); let _ = DrvDisk::init_drv_disk(disk); } #[test] #[serial] fn test_read_write_drv_disk() { let disk = Disk::init_disk(); let mut drv_disk = DrvDisk::init_drv_disk(disk); let mut data = Vec::new(); data.push(0 as u8); data.push(0 as u8); data.push(0 as u8); data.push(0 as u8); let mut data1 = Vec::new(); data1.push(1 as u8); data1.push(1 as u8); data1.push(1 as u8); data1.push(1 as u8); let mut data2: Vec = Vec::new(); drv_disk.write_sector(0, &mut data); drv_disk.write_sector(1, &mut data1); drv_disk.read_sector(1, &mut data2); assert_eq!(data1, data2); assert_ne!(data, data1); assert_ne!(data, data2); } }