adb_kit/
error.rs

1use thiserror::Error;
2use std::time::Duration;
3
4/// ADB 操作相关的错误类型
5#[derive(Debug, Error)]
6pub enum ADBError {
7    /// ADB 命令执行错误
8    #[error("ADB 命令错误: {0}")]
9    CommandError(String),
10
11    /// 设备通信错误
12    #[error("设备通信错误: {0}")]
13    DeviceError(String),
14
15    /// 文件操作错误
16    #[error("文件操作错误: {0}")]
17    FileError(String),
18
19    /// 配置错误
20    #[error("配置错误: {0}")]
21    ConfigError(String),
22
23    /// 超时错误
24    #[error("操作超时 ({duration:?}): {message}")]
25    TimeoutError {
26        message: String,
27        duration: Duration,
28    },
29
30    /// 设备不存在
31    #[error("设备不存在: {0}")]
32    DeviceNotFound(String),
33
34    /// 应用不存在
35    #[error("应用不存在: {0}")]
36    AppNotFound(String),
37
38    /// 权限不足
39    #[error("权限不足: {0}")]
40    PermissionDenied(String),
41
42    /// 连接错误
43    #[error("连接错误: {0}")]
44    ConnectionError(String),
45
46    /// 解析错误
47    #[error("解析错误: {0}")]
48    ParseError(String),
49
50    /// 未知错误
51    #[error("未知错误: {0}")]
52    UnknownError(String),
53}
54
55// 为标准错误类型实现 From trait,简化错误处理
56impl 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
80// 添加结果类型别名简化使用
81pub type ADBResult<T> = Result<T, ADBError>;