Conformed the Review model from the Feed library to the Decodable protocol in the iTunes library.
This commit is contained in:
parent
54a546594d
commit
428b4dd88a
56
Libraries/iTunes/Kit/Conformances/Review+Decodable.swift
Normal file
56
Libraries/iTunes/Kit/Conformances/Review+Decodable.swift
Normal 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)
|
||||
)
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user