| 29 | |
| 30 | impl VhdxDiskSync { |
| 31 | pub fn new(f: File) -> BlockResult<Self> { |
| 32 | Ok(VhdxDiskSync { |
| 33 | vhdx_file: Arc::new(Mutex::new(Vhdx::new(f).map_err(|e| { |
| 34 | let kind = match &e { |
| 35 | VhdxError::NotVhdx(_) |
| 36 | | VhdxError::ParseVhdxHeader(_) |
| 37 | | VhdxError::ParseVhdxMetadata(_) |
| 38 | | VhdxError::ParseVhdxRegionEntry(_) => BlockErrorKind::InvalidFormat, |
| 39 | VhdxError::ReadBatEntry(_) => BlockErrorKind::CorruptImage, |
| 40 | VhdxError::ReadFailed(_) | VhdxError::WriteFailed(_) => BlockErrorKind::Io, |
| 41 | }; |
| 42 | BlockError::new(kind, e).with_op(ErrorOp::Open) |
| 43 | })?)), |
| 44 | }) |
| 45 | } |
| 46 | } |
| 47 | |
| 48 | impl disk_file::DiskSize for VhdxDiskSync { |