use thiserror::Error;
use std::time::Duration;
#[derive(Debug, Error)]
pub enum ADBError {
#[error("ADB 命令错误: {0}")]
CommandError(String),
#[error("设备通信错误: {0}")]
DeviceError(String),
#[error("文件操作错误: {0}")]
FileError(String),
#[error("配置错误: {0}")]
ConfigError(String),
#[error("操作超时 ({duration:?}): {message}")]
TimeoutError {
message: String,
duration: Duration,
},
#[error("设备不存在: {0}")]
DeviceNotFound(String),
#[error("应用不存在: {0}")]
AppNotFound(String),
#[error("权限不足: {0}")]
PermissionDenied(String),
#[error("连接错误: {0}")]
ConnectionError(String),
#[error("解析错误: {0}")]
ParseError(String),
#[error("未知错误: {0}")]
UnknownError(String),
}
impl From<std::io::Error> for ADBError {
fn from(error: std::io::Error) -> Self {
ADBError::FileError(error.to_string())
}
}
impl From<std::str::Utf8Error> for ADBError {
fn from(error: std::str::Utf8Error) -> Self {
ADBError::ParseError(format!("UTF-8 解码错误: {}", error))
}
}
impl From<std::num::ParseIntError> for ADBError {
fn from(error: std::num::ParseIntError) -> Self {
ADBError::ParseError(format!("数字解析错误: {}", error))
}
}
impl From<regex::Error> for ADBError {
fn from(error: regex::Error) -> Self {
ADBError::ParseError(format!("正则表达式错误: {}", error))
}
}
pub type ADBResult<T> = Result<T, ADBError>;