1use crate::io;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
4pub enum BlkError {
5 NotSupported,
6 Retry,
7 NoMemory,
8 InvalidBlockIndex(u64),
9 InvalidRequest,
10 Io,
11 Other(&'static str),
12}
13
14impl core::fmt::Display for BlkError {
15 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
16 match self {
17 BlkError::NotSupported => f.write_str("operation not supported"),
18 BlkError::Retry => f.write_str("operation should be retried"),
19 BlkError::NoMemory => f.write_str("insufficient memory"),
20 BlkError::InvalidBlockIndex(index) => write!(f, "invalid block index: {index}"),
21 BlkError::InvalidRequest => f.write_str("invalid block request"),
22 BlkError::Io => f.write_str("block I/O error"),
23 BlkError::Other(msg) => f.write_str(msg),
24 }
25 }
26}
27
28impl core::error::Error for BlkError {}
29
30impl From<BlkError> for io::ErrorKind {
31 fn from(value: BlkError) -> Self {
32 match value {
33 BlkError::NotSupported => io::ErrorKind::Unsupported,
34 BlkError::Retry => io::ErrorKind::Interrupted,
35 BlkError::NoMemory => io::ErrorKind::OutOfMemory,
36 BlkError::InvalidBlockIndex(_) => io::ErrorKind::NotAvailable,
37 BlkError::InvalidRequest => io::ErrorKind::InvalidParameter {
38 name: "block request",
39 },
40 BlkError::Io => io::ErrorKind::Other("block I/O error".into()),
41 BlkError::Other(msg) => io::ErrorKind::Other(msg.into()),
42 }
43 }
44}
45
46impl From<dma_api::DmaError> for BlkError {
47 fn from(value: dma_api::DmaError) -> Self {
48 match value {
49 dma_api::DmaError::NoMemory => BlkError::NoMemory,
50 _ => BlkError::Io,
51 }
52 }
53}