diff --git a/Sources/Models/DTO/Amiibo.swift b/Sources/Models/DTO/Amiibo.swift index 707b444..882c583 100644 --- a/Sources/Models/DTO/Amiibo.swift +++ b/Sources/Models/DTO/Amiibo.swift @@ -53,6 +53,7 @@ extension DTO { // MARK: - Structs extension DTO.Amiibo { + /// This model represents the list of games related to a particular amiibo, grouped by system. public struct Games: Decodable { @@ -67,13 +68,14 @@ extension DTO.Amiibo { /// /// A list of [Nintendo Switch system](https://en.wikipedia.org/wiki/Nintendo_Switch) games the amiibo can be used with. public let `switch`: [Game] } + } -// MARK: - Decodable +// MARK: - Codable -extension DTO.Amiibo: Decodable { +extension DTO.Amiibo: Codable { - // MARK: Enumerations + // MARK: Keys enum CodingKeys: String, CodingKey { case type @@ -90,7 +92,7 @@ extension DTO.Amiibo: Decodable { case gamesSwitch } - // MARK: Initialisers + // MARK: Decoding /// Initialises this model by decoding from the given decoder. /// - Parameter decoder: The decoder to read data from. @@ -122,5 +124,27 @@ extension DTO.Amiibo: Decodable { } }() } + + // MARK: Encoding + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + + try container.encode(type, forKey: .type) + try container.encode(head, forKey: .head) + try container.encode(tail, forKey: .tail) + try container.encode(name, forKey: .name) + try container.encode(character, forKey: .character) + try container.encode(series, forKey: .series) + try container.encode(gameSeries, forKey: .gameSeries) + try container.encode(image, forKey: .image) + try container.encode(release, forKey: .release) + + if let games { + try container.encode(games.n3ds, forKey: .games3DS) + try container.encode(games.wiiu, forKey: .gamesWiiU) + try container.encode(games.switch, forKey: .gamesSwitch) + } + } } diff --git a/Sources/Models/DTO/AmiiboGame.swift b/Sources/Models/DTO/AmiiboGame.swift index d44d0f4..6d53960 100644 --- a/Sources/Models/DTO/AmiiboGame.swift +++ b/Sources/Models/DTO/AmiiboGame.swift @@ -30,12 +30,16 @@ extension DTO.Amiibo { } -// MARK: - Decodable +// MARK: - Codable -extension DTO.Amiibo.Game: Decodable { +extension DTO.Amiibo.Game: Codable { + + // MARK: Keys + enum CodingKeys: String, CodingKey { case ids = "gameID" case name = "gameName" case usage = "amiiboUsage" } + } diff --git a/Sources/Models/DTO/AmiiboGameUsage.swift b/Sources/Models/DTO/AmiiboGameUsage.swift index b640050..31f06c1 100644 --- a/Sources/Models/DTO/AmiiboGameUsage.swift +++ b/Sources/Models/DTO/AmiiboGameUsage.swift @@ -27,11 +27,15 @@ extension DTO.Amiibo.Game { } -// MARK: - Decodable +// MARK: - Codable -extension DTO.Amiibo.Game.Usage: Decodable { +extension DTO.Amiibo.Game.Usage: Codable { + + // MARK: Keys + enum CodingKeys: String, CodingKey { case explanation = "Usage" case isWritable = "write" } + } diff --git a/Sources/Models/DTO/AmiiboRelease.swift b/Sources/Models/DTO/AmiiboRelease.swift index 15e0285..aa1d143 100644 --- a/Sources/Models/DTO/AmiiboRelease.swift +++ b/Sources/Models/DTO/AmiiboRelease.swift @@ -35,13 +35,17 @@ extension DTO.Amiibo { } -// MARK: - Decodable +// MARK: - Codable -extension DTO.Amiibo.Release: Decodable { +extension DTO.Amiibo.Release: Codable { + + // MARK: Keys + enum CodingKeys: String, CodingKey { case australia = "au" case europe = "eu" case japan = "jp" case america = "na" } + }