TemporaryScheduleOverridePreset.swift 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. //
  2. // TemporaryScheduleOverridePreset.swift
  3. // Loop
  4. //
  5. // Created by Michael Pangburn on 1/2/19.
  6. // Copyright © 2019 LoopKit Authors. All rights reserved.
  7. //
  8. import Foundation
  9. public struct TemporaryScheduleOverridePreset: Hashable {
  10. public let id: UUID
  11. public var symbol: String
  12. public var name: String
  13. public var settings: TemporaryScheduleOverrideSettings
  14. public var duration: TemporaryScheduleOverride.Duration
  15. public init(id: UUID = UUID(), symbol: String, name: String, settings: TemporaryScheduleOverrideSettings, duration: TemporaryScheduleOverride.Duration) {
  16. self.id = id
  17. self.symbol = symbol
  18. self.name = name
  19. self.settings = settings
  20. self.duration = duration
  21. }
  22. public func createOverride(enactTrigger: TemporaryScheduleOverride.EnactTrigger, beginningAt date: Date = Date()) -> TemporaryScheduleOverride {
  23. return TemporaryScheduleOverride(
  24. context: .preset(self),
  25. settings: settings,
  26. startDate: date,
  27. duration: duration,
  28. enactTrigger: enactTrigger,
  29. syncIdentifier: UUID()
  30. )
  31. }
  32. }
  33. extension TemporaryScheduleOverridePreset: RawRepresentable {
  34. public typealias RawValue = [String: Any]
  35. public init?(rawValue: RawValue) {
  36. guard
  37. let idString = rawValue["id"] as? String,
  38. let id = UUID(uuidString: idString),
  39. let symbol = rawValue["symbol"] as? String,
  40. let name = rawValue["name"] as? String,
  41. let settingsRawValue = rawValue["settings"] as? TemporaryScheduleOverrideSettings.RawValue,
  42. let settings = TemporaryScheduleOverrideSettings(rawValue: settingsRawValue),
  43. let durationRawValue = rawValue["duration"] as? TemporaryScheduleOverride.Duration.RawValue,
  44. let duration = TemporaryScheduleOverride.Duration(rawValue: durationRawValue)
  45. else {
  46. return nil
  47. }
  48. self.init(id: id, symbol: symbol, name: name, settings: settings, duration: duration)
  49. }
  50. public var rawValue: RawValue {
  51. return [
  52. "id": id.uuidString,
  53. "symbol": symbol,
  54. "name": name,
  55. "settings": settings.rawValue,
  56. "duration": duration.rawValue
  57. ]
  58. }
  59. }
  60. extension TemporaryScheduleOverridePreset: Codable {}