Statistics.swift 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  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 Units: JSON, Equatable {
  110. var Glucose: String
  111. var HbA1c: String
  112. }
  113. struct Threshold: JSON, Equatable {
  114. var low: Decimal
  115. var high: Decimal
  116. }
  117. struct TIRs: JSON, Equatable {
  118. var TIR: Durations
  119. var Hypos: Durations
  120. var Hypers: Durations
  121. var Threshold: Threshold
  122. var Euglycemic: Durations
  123. }
  124. struct Ins: JSON, Equatable {
  125. let TDD: Decimal?
  126. let bolus: Decimal?
  127. let temp_basal: Decimal?
  128. let scheduled_basal: Decimal?
  129. let total_average: Decimal?
  130. }
  131. struct Variance: JSON, Equatable {
  132. var SD: Durations
  133. var CV: Durations
  134. }
  135. struct Stats: JSON, Equatable {
  136. var Distribution: TIRs
  137. var Glucose: Averages
  138. var HbA1c: Durations
  139. var Units: Units
  140. var LoopCycles: LoopCycles
  141. var Insulin: Ins
  142. var Variance: Variance
  143. }
  144. extension LoopCycles {
  145. private enum CodingKeys: String, CodingKey {
  146. case loops
  147. case errors
  148. case readings
  149. case success_rate
  150. case avg_interval
  151. case median_interval
  152. case min_interval
  153. case max_interval
  154. case avg_duration
  155. case median_duration
  156. case min_duration
  157. case max_duration
  158. }
  159. }
  160. extension Averages {
  161. private enum CodingKeys: String, CodingKey {
  162. case Average
  163. case Median
  164. }
  165. }
  166. extension TIRs {
  167. private enum CodingKeys: String, CodingKey {
  168. case TIR
  169. case Hypos
  170. case Hypers
  171. case Threshold
  172. case Euglycemic
  173. }
  174. }
  175. extension Ins {
  176. private enum CodingKeys: String, CodingKey {
  177. case TDD
  178. case bolus
  179. case temp_basal
  180. case scheduled_basal
  181. case total_average
  182. }
  183. }
  184. extension Variance {
  185. private enum CodingKeys: String, CodingKey {
  186. case SD
  187. case CV
  188. }
  189. }
  190. extension Stats {
  191. private enum CodingKeys: String, CodingKey {
  192. case Distribution
  193. case Glucose
  194. case HbA1c
  195. case Units
  196. case LoopCycles
  197. case Insulin
  198. case Variance
  199. }
  200. }