1use thiserror::Error;
2use std::time::Duration;
3
4#[derive(Debug, Error)]
6pub enum ADBError {
7 #[error("ADB 命令错误: {0}")]
9 CommandError(String),
10
11 #[error("设备通信错误: {0}")]
13 DeviceError(String),
14
15 #[error("文件操作错误: {0}")]
17 FileError(String),
18
19 #[error("配置错误: {0}")]
21 ConfigError(String),
22
23 #[error("操作超时 ({duration:?}): {message}")]
25 TimeoutError {
26 message: String,
27 duration: Duration,
28 },
29
30 #[error("设备不存在: {0}")]
32 DeviceNotFound(String),
33
34 #[error("应用不存在: {0}")]
36 AppNotFound(String),
37
38 #[error("权限不足: {0}")]
40 PermissionDenied(String),
41
42 #[error("连接错误: {0}")]
44 ConnectionError(String),
45
46 #[error("解析错误: {0}")]
48 ParseError(String),
49
50 #[error("未知错误: {0}")]
52 UnknownError(String),
53}
54
55impl From<std::io::Error> for ADBError {
57 fn from(error: std::io::Error) -> Self {
58 ADBError::FileError(error.to_string())
59 }
60}
61
62impl From<std::str::Utf8Error> for ADBError {
63 fn from(error: std::str::Utf8Error) -> Self {
64 ADBError::ParseError(format!("UTF-8 解码错误: {}", error))
65 }
66}
67
68impl From<std::num::ParseIntError> for ADBError {
69 fn from(error: std::num::ParseIntError) -> Self {
70 ADBError::ParseError(format!("数字解析错误: {}", error))
71 }
72}
73
74impl From<regex::Error> for ADBError {
75 fn from(error: regex::Error) -> Self {
76 ADBError::ParseError(format!("正则表达式错误: {}", error))
77 }
78}
79
80pub type ADBResult<T> = Result<T, ADBError>;