1use failure_derive::Fail;
2
3#[derive(Debug, Fail)]
4pub enum AdbError {
5 #[fail(display = "io error: {}", _0)]
6 Io(#[cause] ::std::io::Error),
7
8 #[fail(display = "data crc mismatch")]
9 Crc,
10
11 #[fail(display = "auth not supported")]
12 AuthNotSupported,
13
14 #[fail(display = "unknown command: {:x}", _0)]
15 UnknownCommand(u32),
16
17 #[fail(display = "unexpected command: {:?}", _0)]
18 UnexpectedCommand(crate::message::Command),
19
20 #[fail(display = "unexpected data: {:?}", _0)]
21 UnexpectedData(Vec<u8>),
22
23 #[fail(display = "disconnected")]
24 Disconnected,
25
26 #[fail(display = "fail: {}", _0)]
27 Fail(String),
28}
29
30impl AdbError {
31 pub fn from_unexpected_command_u32(cmd: u32) -> Self {
32 use crate::message::Command;
33 use num_traits::FromPrimitive;
34 if let Some(cmd) = Command::from_u32(cmd) {
35 AdbError::UnexpectedCommand(cmd)
36 } else {
37 AdbError::UnknownCommand(cmd)
38 }
39 }
40}
41
42pub type AdbResult<T> = Result<T, AdbError>;
43
44impl From<::std::io::Error> for AdbError {
45 fn from(err: ::std::io::Error) -> AdbError {
46 AdbError::Io(err)
47 }
48}