""" ADB数据模型定义 """ from typing import Optional, List from pydantic import BaseModel, Field from enum import Enum class DeviceStatus(str, Enum): """设备状态枚举""" DEVICE = "device" OFFLINE = "offline" UNAUTHORIZED = "unauthorized" BOOTLOADER = "bootloader" RECOVERY = "recovery" SIDELOAD = "sideload" DISCONNECTED = "disconnected" class DeviceInfo(BaseModel): """设备信息模型""" serial: str = Field(..., description="设备序列号") status: DeviceStatus = Field(..., description="设备状态") model: Optional[str] = Field(None, description="设备型号") manufacturer: Optional[str] = Field(None, description="制造商") android_version: Optional[str] = Field(None, description="Android版本") sdk_version: Optional[int] = Field(None, description="SDK版本") class DeviceEvent(BaseModel): """设备事件模型""" present: bool = Field(..., description="设备是否连接") serial: str = Field(..., description="设备序列号") status: DeviceStatus = Field(..., description="设备状态") class ForwardInfo(BaseModel): """端口转发信息模型""" serial: str = Field(..., description="设备序列号") local: str = Field(..., description="本地地址") remote: str = Field(..., description="远程地址") class ShellCommand(BaseModel): """Shell命令模型""" command: str = Field(..., description="要执行的命令") timeout: Optional[int] = Field(30, description="命令超时时间(秒)") class ShellResponse(BaseModel): """Shell命令响应模型""" success: bool = Field(..., description="是否成功") output: str = Field(..., description="命令输出") error: Optional[str] = Field(None, description="错误信息") exit_code: Optional[int] = Field(None, description="退出码") class ForwardRequest(BaseModel): """端口转发请求模型""" serial: str = Field(..., description="设备序列号") local: str = Field(..., description="本地地址 (格式: tcp:port 或 localabstract:name)") remote: str = Field(..., description="远程地址 (格式: tcp:port 或 localabstract:name)") norebind: bool = Field(False, description="是否禁止重新绑定") class ServerInfo(BaseModel): """ADB服务器信息模型""" version: int = Field(..., description="服务器版本") host: str = Field(..., description="服务器主机") port: int = Field(..., description="服务器端口") status: str = Field(..., description="服务器状态")