StoredInsulinModel.swift 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. //
  2. // StoredInsulinModel.swift
  3. // LoopKit
  4. //
  5. // Created by Darin Krauss on 7/23/20.
  6. // Copyright © 2020 LoopKit Authors. All rights reserved.
  7. //
  8. import Foundation
  9. public struct StoredInsulinModel: Codable, Equatable {
  10. public enum ModelType: String, Codable {
  11. case afrezza
  12. case fiasp
  13. case lyumjev
  14. case rapidAdult
  15. case rapidChild
  16. }
  17. public let modelType: ModelType
  18. public let delay: TimeInterval
  19. public let actionDuration: TimeInterval
  20. public let peakActivity: TimeInterval
  21. public init(modelType: ModelType, delay: TimeInterval, actionDuration: TimeInterval, peakActivity: TimeInterval) {
  22. self.modelType = modelType
  23. self.delay = delay
  24. self.actionDuration = actionDuration
  25. self.peakActivity = peakActivity
  26. }
  27. }
  28. public extension StoredInsulinModel {
  29. init(_ preset: ExponentialInsulinModelPreset) {
  30. var modelType: StoredInsulinModel.ModelType
  31. switch preset {
  32. case .afrezza:
  33. modelType = .afrezza
  34. case .fiasp:
  35. modelType = .fiasp
  36. case .lyumjev:
  37. modelType = .lyumjev
  38. case .rapidActingAdult:
  39. modelType = .rapidAdult
  40. case .rapidActingChild:
  41. modelType = .rapidChild
  42. }
  43. self.init(modelType: modelType, delay: preset.delay, actionDuration: preset.actionDuration, peakActivity: preset.peakActivity)
  44. }
  45. var presetForRapidActingInsulin: ExponentialInsulinModelPreset? {
  46. switch modelType {
  47. case .rapidAdult:
  48. return .rapidActingAdult
  49. case .rapidChild:
  50. return .rapidActingChild
  51. default:
  52. return nil
  53. }
  54. }
  55. }