28 lines
846 B
Swift
28 lines
846 B
Swift
import Foundation
|
||
|
||
public struct VersionInfo: Sendable, Equatable {
|
||
public let version: String
|
||
/// 命令类型标识,设备可能返回 Int (如 7) 或 String (如 "0x07")
|
||
public let type: String
|
||
}
|
||
|
||
extension VersionInfo: Codable {
|
||
enum CodingKeys: String, CodingKey {
|
||
case version, type
|
||
}
|
||
|
||
public init(from decoder: Decoder) throws {
|
||
let container = try decoder.container(keyedBy: CodingKeys.self)
|
||
version = try container.decode(String.self, forKey: .version)
|
||
|
||
// type may come as Int or String from different firmware versions
|
||
if let str = try? container.decode(String.self, forKey: .type) {
|
||
type = str
|
||
} else if let num = try? container.decode(Int.self, forKey: .type) {
|
||
type = "\(num)"
|
||
} else {
|
||
type = ""
|
||
}
|
||
}
|
||
}
|