Statistics.swift 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. import Foundation
  2. struct Statistics: JSON, Equatable {
  3. var created_at: Date
  4. var iPhone: String
  5. var iOS: String
  6. var Build_Version: String
  7. var Build_Number: String
  8. var Branch: String
  9. var CopyRightNotice: String
  10. var Build_Date: Date
  11. var Algorithm: String
  12. var AdjustmentFactor: Decimal
  13. var Pump: String
  14. var CGM: String
  15. var insulinType: String
  16. var peakActivityTime: Decimal
  17. var Carbs_24h: Decimal
  18. var GlucoseStorage_Days: Decimal
  19. var Statistics: Stats
  20. init(
  21. created_at: Date,
  22. iPhone: String,
  23. iOS: String,
  24. Build_Version: String,
  25. Build_Number: String,
  26. Branch: String,
  27. CopyRightNotice: String,
  28. Build_Date: Date,
  29. Algorithm: String,
  30. AdjustmentFactor: Decimal,
  31. Pump: String,
  32. CGM: String,
  33. insulinType: String,
  34. peakActivityTime: Decimal,
  35. Carbs_24h: Decimal,
  36. GlucoseStorage_Days: Decimal,
  37. Statistics: Stats
  38. ) {
  39. self.created_at = created_at
  40. self.iPhone = iPhone
  41. self.iOS = iOS
  42. self.Build_Version = Build_Version
  43. self.Build_Number = Build_Number
  44. self.Branch = Branch
  45. self.CopyRightNotice = CopyRightNotice
  46. self.Build_Date = Build_Date
  47. self.Algorithm = Algorithm
  48. self.AdjustmentFactor = AdjustmentFactor
  49. self.Pump = Pump
  50. self.CGM = CGM
  51. self.insulinType = insulinType
  52. self.peakActivityTime = peakActivityTime
  53. self.Carbs_24h = Carbs_24h
  54. self.GlucoseStorage_Days = GlucoseStorage_Days
  55. self.Statistics = Statistics
  56. }
  57. static func == (lhs: Statistics, rhs: Statistics) -> Bool {
  58. lhs.created_at == rhs.created_at
  59. }
  60. func hash(into hasher: inout Hasher) {
  61. hasher.combine(created_at)
  62. }
  63. }
  64. extension Statistics {
  65. private enum CodingKeys: String, CodingKey {
  66. case created_at
  67. case iPhone
  68. case iOS
  69. case Build_Version
  70. case Build_Number
  71. case Branch
  72. case CopyRightNotice
  73. case Build_Date
  74. case Algorithm
  75. case AdjustmentFactor
  76. case Pump
  77. case CGM
  78. case insulinType
  79. case peakActivityTime
  80. case Carbs_24h
  81. case GlucoseStorage_Days
  82. case Statistics
  83. }
  84. }
  85. struct LoopCycles: JSON, Equatable {
  86. var loops: Int
  87. var errors: Int
  88. var readings: Int
  89. var success_rate: Decimal
  90. var avg_interval: Decimal
  91. var median_interval: Decimal
  92. var min_interval: Decimal
  93. var max_interval: Decimal
  94. var avg_duration: Decimal
  95. var median_duration: Decimal
  96. var min_duration: Decimal
  97. var max_duration: Decimal
  98. }
  99. struct Averages: JSON, Equatable {
  100. var Average: Durations
  101. var Median: Durations
  102. }
  103. struct Durations: JSON, Equatable {
  104. var day: Decimal
  105. var week: Decimal
  106. var month: Decimal
  107. var total: Decimal
  108. }
  109. struct TIRs: JSON, Equatable {
  110. var TIR: Durations
  111. var Hypos: Durations
  112. var Hypers: Durations
  113. }
  114. struct Ins: JSON, Equatable {
  115. let TDD: Decimal?
  116. let bolus: Decimal?
  117. let temp_basal: Decimal?
  118. let scheduled_basal: Decimal?
  119. }
  120. struct Variance: JSON, Equatable {
  121. var SD: Durations
  122. var CV: Durations
  123. }
  124. struct Stats: JSON, Equatable {
  125. var Distribution: TIRs
  126. var Glucose: Averages
  127. var HbA1c: Durations
  128. var LoopCycles: LoopCycles
  129. var Insulin: Ins
  130. var Variance: Variance
  131. }
  132. extension LoopCycles {
  133. private enum CodingKeys: String, CodingKey {
  134. case loops
  135. case errors
  136. case readings
  137. case success_rate
  138. case avg_interval
  139. case median_interval
  140. case min_interval
  141. case max_interval
  142. case avg_duration
  143. case median_duration
  144. case min_duration
  145. case max_duration
  146. }
  147. }
  148. extension Averages {
  149. private enum CodingKeys: String, CodingKey {
  150. case Average
  151. case Median
  152. }
  153. }
  154. extension TIRs {
  155. private enum CodingKeys: String, CodingKey {
  156. case TIR
  157. case Hypos
  158. case Hypers
  159. }
  160. }
  161. extension Ins {
  162. private enum CodingKeys: String, CodingKey {
  163. case TDD
  164. case bolus
  165. case temp_basal
  166. case scheduled_basal
  167. }
  168. }
  169. extension Variance {
  170. private enum CodingKeys: String, CodingKey {
  171. case SD
  172. case CV
  173. }
  174. }
  175. extension Stats {
  176. private enum CodingKeys: String, CodingKey {
  177. case Distribution
  178. case Glucose
  179. case HbA1c
  180. case LoopCycles
  181. case Insulin
  182. case Variance
  183. }
  184. }