Statistics.swift 4.6 KB

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