WatchState.swift 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import Foundation
  2. import SwiftUI
  3. struct WatchState: Hashable, Equatable, Sendable, Encodable {
  4. var date: Date
  5. var currentGlucose: String?
  6. var currentGlucoseColorString: String?
  7. var trend: String?
  8. var delta: String?
  9. var glucoseValues: [WatchGlucoseObject] = []
  10. var units: GlucoseUnits = .mgdL
  11. var iob: String?
  12. var cob: String?
  13. var lastLoopTime: String?
  14. var overridePresets: [OverridePresetWatch] = []
  15. var tempTargetPresets: [TempTargetPresetWatch] = []
  16. // Safety limits
  17. var maxBolus: Decimal = 10.0
  18. var maxCarbs: Decimal = 250
  19. var maxFat: Decimal = 250
  20. var maxProtein: Decimal = 250
  21. var maxIOB: Decimal = 0
  22. var maxCOB: Decimal = 120
  23. // Pump specific dosing increment
  24. var bolusIncrement: Decimal = 0.05
  25. var confirmBolusFaster: Bool = false
  26. static func == (lhs: WatchState, rhs: WatchState) -> Bool {
  27. lhs.date == rhs.date &&
  28. lhs.currentGlucose == rhs.currentGlucose &&
  29. lhs.trend == rhs.trend &&
  30. lhs.delta == rhs.delta &&
  31. lhs.glucoseValues.count == rhs.glucoseValues.count &&
  32. zip(lhs.glucoseValues, rhs.glucoseValues).allSatisfy {
  33. $0.0.date == $0.1.date && $0.0.glucose == $0.1.glucose && $0.0.color == $0.1.color
  34. } &&
  35. lhs.units == rhs.units &&
  36. lhs.iob == rhs.iob &&
  37. lhs.cob == rhs.cob &&
  38. lhs.lastLoopTime == rhs.lastLoopTime &&
  39. lhs.overridePresets == rhs.overridePresets &&
  40. lhs.tempTargetPresets == rhs.tempTargetPresets &&
  41. lhs.maxBolus == rhs.maxBolus &&
  42. lhs.maxCarbs == rhs.maxCarbs &&
  43. lhs.maxFat == rhs.maxFat &&
  44. lhs.maxProtein == rhs.maxProtein &&
  45. lhs.maxIOB == rhs.maxIOB &&
  46. lhs.maxCOB == rhs.maxCOB &&
  47. lhs.bolusIncrement == rhs.bolusIncrement &&
  48. lhs.confirmBolusFaster == rhs.confirmBolusFaster
  49. }
  50. func hash(into hasher: inout Hasher) {
  51. hasher.combine(date)
  52. hasher.combine(currentGlucose)
  53. hasher.combine(trend)
  54. hasher.combine(delta)
  55. for value in glucoseValues {
  56. hasher.combine(value.date)
  57. hasher.combine(value.glucose)
  58. hasher.combine(value.color)
  59. }
  60. hasher.combine(units)
  61. hasher.combine(iob)
  62. hasher.combine(cob)
  63. hasher.combine(lastLoopTime)
  64. hasher.combine(overridePresets)
  65. hasher.combine(tempTargetPresets)
  66. hasher.combine(maxBolus)
  67. hasher.combine(maxCarbs)
  68. hasher.combine(maxFat)
  69. hasher.combine(maxProtein)
  70. hasher.combine(maxIOB)
  71. hasher.combine(maxCOB)
  72. hasher.combine(bolusIncrement)
  73. hasher.combine(confirmBolusFaster)
  74. }
  75. }