// // Review.swift // ReviewsiTunesKit // // Created by Javier Cicchelli on 17/03/2024. // Copyright © 2024 Röck+Cöde VoF. All rights reserved. // import Foundation import ReviewsFeedKit extension Review: Decodable { // MARK: Enumerations enum ReviewKeys: String, CodingKey { case author case content case id case rating = "im:rating" case title case updated case version = "im:version" } enum NameKeys: String, CodingKey { case name } enum LabelKeys: String, CodingKey { case label } // MARK: Initialisers public init(from decoder: any Decoder) throws { let review = try decoder.container(keyedBy: ReviewKeys.self) let authorName = try review.nestedContainer(keyedBy: NameKeys.self, forKey: .author) let authorLabel = try authorName.nestedContainer(keyedBy: LabelKeys.self, forKey: .name) let contentLabel = try review.nestedContainer(keyedBy: LabelKeys.self, forKey: .content) let idLabel = try review.nestedContainer(keyedBy: LabelKeys.self, forKey: .id) let ratingLabel = try review.nestedContainer(keyedBy: LabelKeys.self, forKey: .rating) let titleLabel = try review.nestedContainer(keyedBy: LabelKeys.self, forKey: .title) let versionLabel = try review.nestedContainer(keyedBy: LabelKeys.self, forKey: .version) let updatedLabel = try review.nestedContainer(keyedBy: LabelKeys.self, forKey: .updated) self.init( id: Int(try idLabel.decode(String.self, forKey: .label)) ?? 0, author: try authorLabel.decode(String.self, forKey: .label), title: try titleLabel.decode(String.self, forKey: .label), content: try contentLabel.decode(String.self, forKey: .label), rating: Int(try ratingLabel.decode(String.self, forKey: .label)) ?? 0, version: try versionLabel.decode(String.self, forKey: .label), updated: try updatedLabel.decode(Date.self, forKey: .label) ) } }