ComputedInsulinSensitivities.swift 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import Foundation
  2. struct ComputedInsulinSensitivities: Codable {
  3. let units: GlucoseUnits
  4. let userPreferredUnits: GlucoseUnits
  5. let sensitivities: [ComputedInsulinSensitivityEntry]
  6. }
  7. extension ComputedInsulinSensitivities {
  8. private enum CodingKeys: String, CodingKey {
  9. case units
  10. case userPreferredUnits = "user_preferred_units"
  11. case sensitivities
  12. }
  13. }
  14. struct ComputedInsulinSensitivityEntry: Codable {
  15. let sensitivity: Decimal
  16. let offset: Int
  17. let start: String
  18. var endOffset: Int?
  19. let id: UUID // we use this to help with mutating inputs, we don't serialize it
  20. init(sensitivity: Decimal, offset: Int, start: String, endOffset: Int? = nil, id: UUID? = nil) {
  21. self.sensitivity = sensitivity
  22. self.offset = offset
  23. self.start = start
  24. self.endOffset = endOffset
  25. self.id = id ?? UUID()
  26. }
  27. enum CodingKeys: CodingKey {
  28. case sensitivity
  29. case offset
  30. case start
  31. case endOffset
  32. }
  33. func encode(to encoder: Encoder) throws {
  34. var container = encoder.container(keyedBy: CodingKeys.self)
  35. try container.encode(sensitivity, forKey: .sensitivity)
  36. try container.encode(offset, forKey: .offset)
  37. try container.encode(start, forKey: .start)
  38. try container.encodeIfPresent(endOffset, forKey: .endOffset)
  39. }
  40. init(from decoder: Decoder) throws {
  41. let container = try decoder.container(keyedBy: CodingKeys.self)
  42. sensitivity = try container.decode(Decimal.self, forKey: .sensitivity)
  43. offset = try container.decode(Int.self, forKey: .offset)
  44. start = try container.decode(String.self, forKey: .start)
  45. endOffset = try container.decodeIfPresent(Int.self, forKey: .endOffset)
  46. id = UUID()
  47. }
  48. }