virtio_drivers/
embedded_io.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//! Implementation of `embedded-io::Error' trait for `Error`.

use crate::{device::socket::SocketError, Error};
use embedded_io::ErrorKind;

impl embedded_io::Error for Error {
    fn kind(&self) -> ErrorKind {
        match self {
            Error::InvalidParam => ErrorKind::InvalidInput,
            Error::DmaError => ErrorKind::OutOfMemory,
            Error::Unsupported => ErrorKind::Unsupported,
            Error::SocketDeviceError(e) => match e {
                &SocketError::ConnectionExists => ErrorKind::AddrInUse,
                SocketError::NotConnected => ErrorKind::NotConnected,
                SocketError::PeerSocketShutdown => ErrorKind::ConnectionAborted,
                SocketError::BufferTooShort => ErrorKind::InvalidInput,
                SocketError::OutputBufferTooShort(_) => ErrorKind::InvalidInput,
                SocketError::BufferTooLong(_, _) => ErrorKind::InvalidInput,
                SocketError::InsufficientBufferSpaceInPeer => ErrorKind::WriteZero,
                SocketError::UnknownOperation(_)
                | SocketError::InvalidOperation
                | SocketError::InvalidNumber
                | SocketError::UnexpectedDataInPacket
                | SocketError::RecycledWrongBuffer => ErrorKind::Other,
            },
            Error::QueueFull
            | Error::NotReady
            | Error::WrongToken
            | Error::AlreadyUsed
            | Error::IoError
            | Error::ConfigSpaceTooSmall
            | Error::ConfigSpaceMissing => ErrorKind::Other,
        }
    }
}