Conformed the Review model from the Feed library to the Decodable protocol in the iTunes library.

This commit is contained in:
Javier Cicchelli 2024-03-17 16:48:12 +01:00
parent 54a546594d
commit 428b4dd88a

View File

@ -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)
)
}
}