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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
use std::io; use crate::common::ResponseKind; use daemon_engine::DaemonError; use serde_json::{Error as JsonError}; use tokio::timer::timeout::Error as TimeoutError; use linux_embedded_hal::sysfs_gpio::Error as GpioError; #[derive(Debug)] pub enum Error { Io(io::ErrorKind), Json(JsonError), Timeout, Remote(String), Daemon(DaemonError), InvalidResponse(ResponseKind), Gpio(GpioError), InvalidSpiMode, InvalidRemoteAddress, None(()), } impl From<io::Error> for Error { fn from(e: io::Error) -> Self { Error::Io(e.kind()) } } impl From<JsonError> for Error { fn from(e: JsonError) -> Self { Error::Json(e) } } impl From<DaemonError> for Error { fn from(e: DaemonError) -> Self { Error::Daemon(e) } } impl From<()> for Error { fn from(e: ()) -> Self { Error::None(e) } } impl From<GpioError> for Error { fn from(e: GpioError) -> Self { Error::Gpio(e) } } impl From<TimeoutError<Error>> for Error { fn from(e: TimeoutError<Error>) -> Self { if e.is_inner() { e.into_inner().unwrap() } else { Error::Timeout } } }