From 428b4dd88a9712ff71bf7107517274f69c481e42 Mon Sep 17 00:00:00 2001 From: Javier Cicchelli Date: Sun, 17 Mar 2024 16:48:12 +0100 Subject: [PATCH] Conformed the Review model from the Feed library to the Decodable protocol in the iTunes library. --- .../Kit/Conformances/Review+Decodable.swift | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 Libraries/iTunes/Kit/Conformances/Review+Decodable.swift diff --git a/Libraries/iTunes/Kit/Conformances/Review+Decodable.swift b/Libraries/iTunes/Kit/Conformances/Review+Decodable.swift new file mode 100644 index 0000000..41269fe --- /dev/null +++ b/Libraries/iTunes/Kit/Conformances/Review+Decodable.swift @@ -0,0 +1,56 @@ +// +// 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) + ) + } + +}