Command.swift 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. //
  2. // Command.swift
  3. // xDripG5
  4. //
  5. // Created by Paul Dickens on 22/03/2018.
  6. // Copyright © 2018 LoopKit Authors. All rights reserved.
  7. //
  8. import Foundation
  9. import HealthKit
  10. public enum Command: RawRepresentable {
  11. public typealias RawValue = [String: Any]
  12. case startSensor(at: Date)
  13. case stopSensor(at: Date)
  14. case calibrateSensor(to: HKQuantity, at: Date)
  15. case resetTransmitter
  16. public init?(rawValue: RawValue) {
  17. guard let action = rawValue["action"] as? Action.RawValue else {
  18. return nil
  19. }
  20. let date = rawValue["date"] as? Date
  21. switch Action(rawValue: action) {
  22. case .startSensor?:
  23. guard let date = date else {
  24. return nil
  25. }
  26. self = .startSensor(at: date)
  27. case .stopSensor?:
  28. guard let date = date else {
  29. return nil
  30. }
  31. self = .stopSensor(at: date)
  32. case .calibrateSensor?:
  33. guard let date = date, let glucose = rawValue["glucose"] as? HKQuantity else {
  34. return nil
  35. }
  36. self = .calibrateSensor(to: glucose, at: date)
  37. case .resetTransmitter?:
  38. self = .resetTransmitter
  39. case .none:
  40. return nil
  41. }
  42. }
  43. private enum Action: Int {
  44. case startSensor, stopSensor, calibrateSensor, resetTransmitter
  45. }
  46. public var rawValue: RawValue {
  47. switch self {
  48. case .startSensor(let date):
  49. return [
  50. "action": Action.startSensor.rawValue,
  51. "date": date
  52. ]
  53. case .stopSensor(let date):
  54. return [
  55. "action": Action.stopSensor.rawValue,
  56. "date": date
  57. ]
  58. case .calibrateSensor(let glucose, let date):
  59. return [
  60. "action": Action.calibrateSensor.rawValue,
  61. "date": date,
  62. "glucose": glucose
  63. ]
  64. case .resetTransmitter:
  65. return [
  66. "action": Action.resetTransmitter.rawValue
  67. ]
  68. }
  69. }
  70. }