feat: moved all reader's values to the Codable protocol

This commit is contained in:
Serhiy Mytrovtsiy
2023-06-27 17:09:38 +02:00
parent 91603406a2
commit 1e0ba3b61f
17 changed files with 327 additions and 169 deletions

View File

@@ -13,7 +13,7 @@ import Foundation
import Kit
import CoreBluetooth
public struct BLEDevice {
public struct BLEDevice: Codable {
let address: String
var name: String
var uuid: UUID?
@@ -24,7 +24,7 @@ public struct BLEDevice {
var isConnected: Bool = false
var isPaired: Bool = false
var peripheral: CBPeripheral?
var peripheral: CBPeripheral? = nil
var isPeripheralInitialized: Bool = false
var id: String {
@@ -38,6 +38,42 @@ public struct BLEDevice {
return Store.shared.bool(key: "ble_\(self.id)", defaultValue: false)
}
}
private enum CodingKeys: String, CodingKey {
case address, name, uuid, RSSI, batteryLevel, isConnected, isPaired
}
init(address: String, name: String, uuid: UUID?, RSSI: Int?, batteryLevel: [KeyValue_t], isConnected: Bool, isPaired: Bool) {
self.address = address
self.name = name
self.uuid = uuid
self.RSSI = RSSI
self.batteryLevel = batteryLevel
self.isConnected = isConnected
self.isPaired = isPaired
}
public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
self.address = try container.decode(String.self, forKey: .address)
self.name = try container.decode(String.self, forKey: .name)
self.uuid = try? container.decode(UUID.self, forKey: .uuid)
self.RSSI = try? container.decode(Int.self, forKey: .RSSI)
self.batteryLevel = try container.decode(Array<KeyValue_t>.self, forKey: .batteryLevel)
self.isConnected = try container.decode(Bool.self, forKey: .isConnected)
self.isPaired = try container.decode(Bool.self, forKey: .isPaired)
}
public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(address, forKey: .address)
try container.encode(name, forKey: .name)
try container.encode(uuid, forKey: .uuid)
try container.encode(RSSI, forKey: .RSSI)
try container.encode(batteryLevel, forKey: .batteryLevel)
try container.encode(isConnected, forKey: .isConnected)
try container.encode(isPaired, forKey: .isPaired)
}
}
public class Bluetooth: Module {