package xiaomi import ( "errors" "fmt" ) // 封装层错误定义 var ( // ErrNotSupported 设备不支持该操作 ErrNotSupported = errors.New("xiaomi: operation not supported by this device") // ErrDeviceNotFound 设备不存在 ErrDeviceNotFound = errors.New("xiaomi: device not found") // ErrHomeNotFound 家庭不存在 ErrHomeNotFound = errors.New("xiaomi: home not found") // ErrRoomNotFound 房间不存在 ErrRoomNotFound = errors.New("xiaomi: room not found") // ErrDeviceOffline 设备离线 ErrDeviceOffline = errors.New("xiaomi: device is offline") // ErrNoSPEC 设备缺少 SPEC 信息 ErrNoSPEC = errors.New("xiaomi: device has no SPEC information") // ErrInvalidProp 属性读取/写入失败 ErrInvalidProp = errors.New("xiaomi: invalid property access") // ErrNotInitialized 客户端未初始化 ErrNotInitialized = errors.New("xiaomi: client not initialized") ) // ClientError 带上下文的客户端错误 type ClientError struct { Op string // 操作名称 DID string // 设备 ID Err error // 底层错误 } func (e *ClientError) Error() string { if e.DID != "" { return fmt.Sprintf("xiaomi: %s device=%s: %v", e.Op, e.DID, e.Err) } return fmt.Sprintf("xiaomi: %s: %v", e.Op, e.Err) } func (e *ClientError) Unwrap() error { return e.Err } // wrapErr 包装错误 func wrapErr(op, did string, err error) error { if err == nil { return nil } return &ClientError{Op: op, DID: did, Err: err} }