@@ -341,3 +341,83 @@ extension DateComponents : _ObjectTypeBridgeable {
341
341
}
342
342
}
343
343
344
+ extension DateComponents : Codable {
345
+ private enum CodingKeys : Int , CodingKey {
346
+ case calendar
347
+ case timeZone
348
+ case era
349
+ case year
350
+ case month
351
+ case day
352
+ case hour
353
+ case minute
354
+ case second
355
+ case nanosecond
356
+ case weekday
357
+ case weekdayOrdinal
358
+ case quarter
359
+ case weekOfMonth
360
+ case weekOfYear
361
+ case yearForWeekOfYear
362
+ }
363
+
364
+ public init ( from decoder: Decoder ) throws {
365
+ let container = try decoder. container ( keyedBy: CodingKeys . self)
366
+ let calendar = try container. decodeIfPresent ( Calendar . self, forKey: . calendar)
367
+ let timeZone = try container. decodeIfPresent ( TimeZone . self, forKey: . timeZone)
368
+ let era = try container. decodeIfPresent ( Int . self, forKey: . era)
369
+ let year = try container. decodeIfPresent ( Int . self, forKey: . year)
370
+ let month = try container. decodeIfPresent ( Int . self, forKey: . month)
371
+ let day = try container. decodeIfPresent ( Int . self, forKey: . day)
372
+ let hour = try container. decodeIfPresent ( Int . self, forKey: . hour)
373
+ let minute = try container. decodeIfPresent ( Int . self, forKey: . minute)
374
+ let second = try container. decodeIfPresent ( Int . self, forKey: . second)
375
+ let nanosecond = try container. decodeIfPresent ( Int . self, forKey: . nanosecond)
376
+
377
+ let weekday = try container. decodeIfPresent ( Int . self, forKey: . weekday)
378
+ let weekdayOrdinal = try container. decodeIfPresent ( Int . self, forKey: . weekdayOrdinal)
379
+ let quarter = try container. decodeIfPresent ( Int . self, forKey: . quarter)
380
+ let weekOfMonth = try container. decodeIfPresent ( Int . self, forKey: . weekOfMonth)
381
+ let weekOfYear = try container. decodeIfPresent ( Int . self, forKey: . weekOfYear)
382
+ let yearForWeekOfYear = try container. decodeIfPresent ( Int . self, forKey: . yearForWeekOfYear)
383
+
384
+ self . init ( calendar: calendar,
385
+ timeZone: timeZone,
386
+ era: era,
387
+ year: year,
388
+ month: month,
389
+ day: day,
390
+ hour: hour,
391
+ minute: minute,
392
+ second: second,
393
+ nanosecond: nanosecond,
394
+ weekday: weekday,
395
+ weekdayOrdinal: weekdayOrdinal,
396
+ quarter: quarter,
397
+ weekOfMonth: weekOfMonth,
398
+ weekOfYear: weekOfYear,
399
+ yearForWeekOfYear: yearForWeekOfYear)
400
+ }
401
+
402
+ public func encode( to encoder: Encoder ) throws {
403
+ // TODO: Replace all with encodeIfPresent, when added.
404
+ var container = encoder. container ( keyedBy: CodingKeys . self)
405
+ if self . calendar != nil { try container. encode ( self . calendar!, forKey: . calendar) }
406
+ if self . timeZone != nil { try container. encode ( self . timeZone!, forKey: . timeZone) }
407
+ if self . era != nil { try container. encode ( self . era!, forKey: . era) }
408
+ if self . year != nil { try container. encode ( self . year!, forKey: . year) }
409
+ if self . month != nil { try container. encode ( self . month!, forKey: . month) }
410
+ if self . day != nil { try container. encode ( self . day!, forKey: . day) }
411
+ if self . hour != nil { try container. encode ( self . hour!, forKey: . hour) }
412
+ if self . minute != nil { try container. encode ( self . minute!, forKey: . minute) }
413
+ if self . second != nil { try container. encode ( self . second!, forKey: . second) }
414
+ if self . nanosecond != nil { try container. encode ( self . nanosecond!, forKey: . nanosecond) }
415
+
416
+ if self . weekday != nil { try container. encode ( self . weekday!, forKey: . weekday) }
417
+ if self . weekdayOrdinal != nil { try container. encode ( self . weekdayOrdinal!, forKey: . weekdayOrdinal) }
418
+ if self . quarter != nil { try container. encode ( self . quarter!, forKey: . quarter) }
419
+ if self . weekOfMonth != nil { try container. encode ( self . weekOfMonth!, forKey: . weekOfMonth) }
420
+ if self . weekOfYear != nil { try container. encode ( self . weekOfYear!, forKey: . weekOfYear) }
421
+ if self . yearForWeekOfYear != nil { try container. encode ( self . yearForWeekOfYear!, forKey: . yearForWeekOfYear) }
422
+ }
423
+ }
0 commit comments