WatchState.swift 2.3 KB

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