NewCarbEntry.swift 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. //
  2. // NewCarbEntry.swift
  3. // CarbKit
  4. //
  5. // Created by Nathan Racklyeft on 1/15/16.
  6. // Copyright © 2016 Nathan Racklyeft. All rights reserved.
  7. //
  8. import Foundation
  9. import HealthKit
  10. public struct NewCarbEntry: CarbEntry, Equatable, RawRepresentable {
  11. public typealias RawValue = [String: Any]
  12. public let date: Date
  13. public let quantity: HKQuantity
  14. public let startDate: Date
  15. public let foodType: String?
  16. public let absorptionTime: TimeInterval?
  17. public init(date: Date = Date(), quantity: HKQuantity, startDate: Date, foodType: String?, absorptionTime: TimeInterval?) {
  18. self.date = date
  19. self.quantity = quantity
  20. self.startDate = startDate
  21. self.foodType = foodType
  22. self.absorptionTime = absorptionTime
  23. }
  24. public init?(rawValue: RawValue) {
  25. guard
  26. let date = rawValue["date"] as? Date,
  27. let grams = rawValue["grams"] as? Double,
  28. let startDate = rawValue["startDate"] as? Date
  29. else {
  30. return nil
  31. }
  32. self.init(
  33. date: date,
  34. quantity: HKQuantity(unit: .gram(), doubleValue: grams),
  35. startDate: startDate,
  36. foodType: rawValue["foodType"] as? String,
  37. absorptionTime: rawValue["absorptionTime"] as? TimeInterval
  38. )
  39. }
  40. public var rawValue: RawValue {
  41. var rawValue: RawValue = [
  42. "date": date,
  43. "grams": quantity.doubleValue(for: .gram()),
  44. "startDate": startDate
  45. ]
  46. rawValue["foodType"] = foodType
  47. rawValue["absorptionTime"] = absorptionTime
  48. return rawValue
  49. }
  50. }