//! df-tunnel 错误类型 //! //! 设计:单一 TunnelError 覆盖 WS 连接/收发/序列化/鉴权四类失败, //! thiserror 派生保留错误链(`#[from]` 自动 From)。 //! 脚手架阶段仅定义类型,不涉及具体错误码细分(Phase2 填充)。 use thiserror::Error; /// 隧道客户端运行期错误 /// /// 覆盖范围: /// - 连接建立失败(网络不可达 / TLS 握手 / 鉴权拒绝) /// - 收发失败(底层 WS 帧 / 序列化 / 反序列化) /// - 协议层错误(未预期的消息类型 / 配对绑定失败) #[derive(Debug, Error)] pub enum TunnelError { /// WS 连接建立或断线重连失败 #[error("隧道连接失败: {0}")] Connect(String), /// 底层 tungstenite WS 协议错误 #[error("WS 协议错误: {0}")] WebSocket(#[from] tokio_tungstenite::tungstenite::Error), /// 消息序列化/反序列化失败 #[error("消息序列化失败: {0}")] Serde(#[from] serde_json::Error), /// 云后端鉴权/配对拒绝(token 无效 / device 未绑定) #[error("鉴权/配对失败: {0}")] Auth(String), /// 隧道未连接(对 send/recv 的前置状态校验失败) #[error("隧道未连接")] NotConnected, /// 其他未归类错误(降级通道,Phase2 视需要细分) #[error("隧道内部错误: {0}")] Other(#[from] anyhow::Error), } /// 模块级 Result 别名,简化调用方签名 pub type Result = std::result::Result;