DeviceStatus.swift 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. //
  2. // DeviceStatus.swift
  3. // RileyLink
  4. //
  5. // Created by Pete Schwamb on 7/26/16.
  6. // Copyright © 2016 Pete Schwamb. All rights reserved.
  7. //
  8. import Foundation
  9. public struct DeviceStatus {
  10. typealias RawValue = [String: Any]
  11. public let device: String
  12. public let timestamp: Date
  13. public let identifier: String?
  14. public let pumpStatus: PumpStatus?
  15. public let uploaderStatus: UploaderStatus?
  16. public let loopStatus: LoopStatus?
  17. public let radioAdapter: RadioAdapter?
  18. public let overrideStatus: OverrideStatus?
  19. public init(device: String, timestamp: Date, pumpStatus: PumpStatus? = nil, uploaderStatus: UploaderStatus? = nil, loopStatus: LoopStatus? = nil, radioAdapter: RadioAdapter? = nil, overrideStatus: OverrideStatus? = nil, identifier: String? = nil) {
  20. self.device = device
  21. self.timestamp = timestamp
  22. self.pumpStatus = pumpStatus
  23. self.uploaderStatus = uploaderStatus
  24. self.loopStatus = loopStatus
  25. self.radioAdapter = radioAdapter
  26. self.overrideStatus = overrideStatus
  27. self.identifier = identifier
  28. }
  29. public var dictionaryRepresentation: [String: Any] {
  30. var rval = [String: Any]()
  31. rval["device"] = device
  32. rval["created_at"] = TimeFormat.timestampStrFromDate(timestamp)
  33. if let pump = pumpStatus {
  34. rval["pump"] = pump.dictionaryRepresentation
  35. }
  36. if let uploader = uploaderStatus {
  37. rval["uploader"] = uploader.dictionaryRepresentation
  38. }
  39. if let loop = loopStatus {
  40. rval["loop"] = loop.dictionaryRepresentation
  41. }
  42. if let radioAdapter = radioAdapter {
  43. rval["radioAdapter"] = radioAdapter.dictionaryRepresentation
  44. }
  45. if let override = overrideStatus {
  46. rval["override"] = override.dictionaryRepresentation
  47. }
  48. if let identifier = identifier {
  49. rval["identifier"] = identifier
  50. }
  51. return rval
  52. }
  53. init?(rawValue: RawValue) {
  54. guard
  55. let identifier = rawValue["_id"] as? String,
  56. let timestampStr = rawValue["created_at"] as? String,
  57. let timestamp = TimeFormat.dateFromTimestamp(timestampStr),
  58. let device = rawValue["device"] as? String
  59. else {
  60. return nil
  61. }
  62. self.timestamp = timestamp
  63. self.device = device
  64. self.identifier = identifier
  65. if let loopStatusRaw = rawValue["loop"] as? LoopStatus.RawValue {
  66. loopStatus = LoopStatus(rawValue: loopStatusRaw)
  67. } else {
  68. loopStatus = nil
  69. }
  70. // TODO: OverrideStatus not being parsed yet
  71. self.overrideStatus = nil
  72. // TODO: PumpStatus not being parsed yet
  73. self.pumpStatus = nil
  74. // TODO: UploaderStatus not being parsed yet
  75. self.uploaderStatus = nil
  76. // TODO: RadioAdapter not being parsed yet
  77. self.radioAdapter = nil
  78. }
  79. }