| use codec::{RecvError, SendError}; |
| use frame::Reason; |
| |
| use std::io; |
| |
| /// Either an H2 reason or an I/O error |
| #[derive(Debug)] |
| pub enum Error { |
| Proto(Reason), |
| Io(io::Error), |
| } |
| |
| impl Error { |
| /// Clone the error for internal purposes. |
| /// |
| /// `io::Error` is not `Clone`, so we only copy the `ErrorKind`. |
| pub(super) fn shallow_clone(&self) -> Error { |
| match *self { |
| Error::Proto(reason) => Error::Proto(reason), |
| Error::Io(ref io) => Error::Io(io::Error::from(io.kind())), |
| } |
| } |
| } |
| |
| impl From<Reason> for Error { |
| fn from(src: Reason) -> Self { |
| Error::Proto(src) |
| } |
| } |
| |
| impl From<io::Error> for Error { |
| fn from(src: io::Error) -> Self { |
| Error::Io(src) |
| } |
| } |
| |
| impl From<Error> for RecvError { |
| fn from(src: Error) -> RecvError { |
| match src { |
| Error::Proto(reason) => RecvError::Connection(reason), |
| Error::Io(e) => RecvError::Io(e), |
| } |
| } |
| } |
| |
| impl From<Error> for SendError { |
| fn from(src: Error) -> SendError { |
| match src { |
| Error::Proto(reason) => SendError::Connection(reason), |
| Error::Io(e) => SendError::Io(e), |
| } |
| } |
| } |