virtio_drivers/
embedded_io.rs

1//! Implementation of `embedded-io::Error' trait for `Error`.
2
3use crate::{device::socket::SocketError, Error};
4use embedded_io::ErrorKind;
5
6impl embedded_io::Error for Error {
7    fn kind(&self) -> ErrorKind {
8        match self {
9            Error::InvalidParam => ErrorKind::InvalidInput,
10            Error::DmaError => ErrorKind::OutOfMemory,
11            Error::Unsupported => ErrorKind::Unsupported,
12            Error::SocketDeviceError(e) => match e {
13                &SocketError::ConnectionExists => ErrorKind::AddrInUse,
14                SocketError::NotConnected => ErrorKind::NotConnected,
15                SocketError::PeerSocketShutdown => ErrorKind::ConnectionAborted,
16                SocketError::BufferTooShort => ErrorKind::InvalidInput,
17                SocketError::OutputBufferTooShort(_) => ErrorKind::InvalidInput,
18                SocketError::BufferTooLong(_, _) => ErrorKind::InvalidInput,
19                SocketError::InsufficientBufferSpaceInPeer => ErrorKind::WriteZero,
20                SocketError::UnknownOperation(_)
21                | SocketError::InvalidOperation
22                | SocketError::InvalidNumber
23                | SocketError::UnexpectedDataInPacket
24                | SocketError::RecycledWrongBuffer => ErrorKind::Other,
25            },
26            Error::QueueFull
27            | Error::NotReady
28            | Error::WrongToken
29            | Error::AlreadyUsed
30            | Error::IoError
31            | Error::ConfigSpaceTooSmall
32            | Error::ConfigSpaceMissing => ErrorKind::Other,
33        }
34    }
35}