@@ -52,31 +52,26 @@ public struct ReaderFeed: Decodable {
5252 /// Site data from meta.data.site
5353 private var site : SiteData ?
5454
55- private enum CodingKeys : CodingKey {
56- case meta
55+ public init ( from decoder: Decoder ) throws {
56+ let parsed = try ReaderFeedJSON ( from: decoder)
57+ self . feed = parsed. meta? . data? . feed
58+ self . site = parsed. meta? . data? . site
5759 }
60+ }
5861
59- private enum MetaKeys : CodingKey {
60- case data
61- }
62+ private struct ReaderFeedJSON : Decodable {
63+ struct Meta : Decodable {
64+ struct Data : Decodable {
65+ var feed : FeedData ?
66+ var site : SiteData ?
67+ }
6268
63- private enum DataKeys : CodingKey {
64- case site
65- case feed
69+ var data : Data ?
6670 }
6771
68- public init ( from decoder: Decoder ) throws {
69- let root = try decoder. container ( keyedBy: CodingKeys . self)
70- if let meta = try ? root. nestedContainer ( keyedBy: MetaKeys . self, forKey: . meta) ,
71- let data = try ? meta. nestedContainer ( keyedBy: DataKeys . self, forKey: . data) {
72- self . feed = try ? data. decode ( FeedData . self, forKey: . feed)
73- self . site = try ? data. decode ( SiteData . self, forKey: . site)
74- }
75- }
72+ var meta : Meta ?
7673}
7774
78- // MARK: - Feed Data
79-
8075/// Represents feed-specific data from meta.data.feed
8176private struct FeedData : Decodable {
8277 let feedID : String ?
@@ -94,9 +89,18 @@ private struct FeedData: Decodable {
9489 case description = " description "
9590 case imageURL = " image "
9691 }
97- }
9892
99- // MARK: - Site Data
93+ init ( from decoder: Decoder ) throws {
94+ let container = try decoder. container ( keyedBy: CodingKeys . self)
95+
96+ feedID = try ? container. decodeIfPresent ( String . self, forKey: . feedID)
97+ blogID = try ? container. decodeIfPresent ( String . self, forKey: . blogID)
98+ name = try ? container. decodeIfPresent ( String . self, forKey: . name)
99+ url = try ? container. decodeIfPresent ( URL . self, forKey: . url)
100+ description = try ? container. decodeIfPresent ( String . self, forKey: . description)
101+ imageURL = try ? container. decodeIfPresent ( URL . self, forKey: . imageURL)
102+ }
103+ }
100104
101105/// Represents site-specific data from meta.data.site
102106private struct SiteData : Decodable {
0 commit comments