1pub type Result<T> = core::result::Result<T, Error>;
2
3#[derive(Debug, PartialEq, Clone, Copy, Eq)]
4pub enum Error {
5 Device(crate::Error),
6 InvalidPartition,
7 InvalidSignature,
8 DeviceTooSmall,
9 BufferTooSmall,
10 NoValidPartitions,
11 InvalidIndex,
12 OverlappingPartitions,
13 MultipleBootablePartitions,
14 WriteFailed,
15 ReadFailed,
16 Full,
17}
18
19impl core::error::Error for Error {}
20
21impl core::fmt::Display for Error {
22 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
23 match self {
24 Error::Device(e) => write!(f, "Device error: {}", e),
25 Error::InvalidPartition => write!(f, "Invalid partition"),
26 Error::InvalidSignature => write!(f, "Invalid MBR signature"),
27 Error::DeviceTooSmall => write!(f, "Device is too small for MBR"),
28 Error::BufferTooSmall => write!(f, "Provided buffer is too small"),
29 Error::NoValidPartitions => write!(f, "No valid partitions found"),
30 Error::InvalidIndex => write!(f, "Invalid partition index"),
31 Error::OverlappingPartitions => write!(f, "Partitions are overlapping"),
32 Error::MultipleBootablePartitions => write!(f, "Multiple bootable partitions found"),
33 Error::WriteFailed => write!(f, "Failed to write data"),
34 Error::ReadFailed => write!(f, "Failed to read data"),
35 Error::Full => write!(f, "No free partition slots available"),
36 }
37 }
38}
39
40impl From<crate::Error> for Error {
41 fn from(value: crate::Error) -> Self {
42 Error::Device(value)
43 }
44}