From 29f766ebdb6141356748e49e27c16359b7bb5be4 Mon Sep 17 00:00:00 2001 From: Javier Cicchelli Date: Tue, 18 Apr 2023 18:37:08 +0000 Subject: [PATCH] [Feature] Models of the service (#1) This PR contains the implementation of all the models used by this service: `Amiibo`, `Amiibo.Game`, `Amiibo.Release`, `Amiibo.Usage`, `KeyName` and `LastUpdated`. Co-authored-by: Javier Cicchelli Reviewed-on: https://repo.rock-n-code.com/rock-n-code/amiibo-service/pulls/1 --- Sources/Models/Amiibo.swift | 18 ++++++++++++++++++ Sources/Models/AmiiboGame.swift | 17 +++++++++++++++++ Sources/Models/AmiiboRelease.swift | 21 +++++++++++++++++++++ Sources/Models/AmiiboUsage.swift | 15 +++++++++++++++ Sources/Models/KeyName.swift | 15 +++++++++++++++ Sources/Models/LastUpdated.swift | 13 +++++++++++++ 6 files changed, 99 insertions(+) create mode 100644 Sources/Models/Amiibo.swift create mode 100644 Sources/Models/AmiiboGame.swift create mode 100644 Sources/Models/AmiiboRelease.swift create mode 100644 Sources/Models/AmiiboUsage.swift create mode 100644 Sources/Models/KeyName.swift create mode 100644 Sources/Models/LastUpdated.swift diff --git a/Sources/Models/Amiibo.swift b/Sources/Models/Amiibo.swift new file mode 100644 index 0000000..7199c01 --- /dev/null +++ b/Sources/Models/Amiibo.swift @@ -0,0 +1,18 @@ +public struct Amiibo { + public let type: String + public let head: String + public let tail: String + public let name: String + public let character: String + public let amiiboSeries: String + public let gameSeries: String + public let image: String + public let release: Release + public let games3DS: [Game]? + public let gamesWiiU: [Game]? + public let gamesSwitch: [Game]? +} + +// MARK: - Decodable + +extension Amiibo: Decodable {} diff --git a/Sources/Models/AmiiboGame.swift b/Sources/Models/AmiiboGame.swift new file mode 100644 index 0000000..9abefcc --- /dev/null +++ b/Sources/Models/AmiiboGame.swift @@ -0,0 +1,17 @@ +extension Amiibo { + public struct Game { + public let identifiers: [String] + public let name: String + public let usage: [Usage] + } +} + +// MARK: - Decodable + +extension Amiibo.Game: Decodable { + enum CodingKeys: String, CodingKey { + case identifiers = "gameID" + case name = "gameName" + case usage = "amiiboUsage" + } +} diff --git a/Sources/Models/AmiiboRelease.swift b/Sources/Models/AmiiboRelease.swift new file mode 100644 index 0000000..a53c7a1 --- /dev/null +++ b/Sources/Models/AmiiboRelease.swift @@ -0,0 +1,21 @@ +import Foundation + +extension Amiibo { + public struct Release { + public let australia: Date? + public let europe: Date? + public let japan: Date? + public let america: Date? + } +} + +// MARK: - Decodable + +extension Amiibo.Release: Decodable { + enum CodingKeys: String, CodingKey { + case australia = "au" + case europe = "eu" + case japan = "jp" + case america = "na" + } +} diff --git a/Sources/Models/AmiiboUsage.swift b/Sources/Models/AmiiboUsage.swift new file mode 100644 index 0000000..ee07b16 --- /dev/null +++ b/Sources/Models/AmiiboUsage.swift @@ -0,0 +1,15 @@ +extension Amiibo { + public struct Usage { + public let explanation: String + public let isWritable: Bool + } +} + +// MARK: - Decodable + +extension Amiibo.Usage: Decodable { + enum CodingKeys: String, CodingKey { + case explanation = "Usage" + case isWritable = "write" + } +} diff --git a/Sources/Models/KeyName.swift b/Sources/Models/KeyName.swift new file mode 100644 index 0000000..f606206 --- /dev/null +++ b/Sources/Models/KeyName.swift @@ -0,0 +1,15 @@ +public struct KeyName { + public let key: String + public let name: String? +} + +// MARK: - Decodable + +extension KeyName: Decodable {} + +// MARK: - Type aliases + +public typealias AmiiboType = KeyName +public typealias AmiiboSeries = KeyName +public typealias GameSeries = KeyName +public typealias Character = KeyName diff --git a/Sources/Models/LastUpdated.swift b/Sources/Models/LastUpdated.swift new file mode 100644 index 0000000..0fefe45 --- /dev/null +++ b/Sources/Models/LastUpdated.swift @@ -0,0 +1,13 @@ +import Foundation + +public struct LastUpdated { + public let timestamp: Date +} + +// MARK: - Decodable + +extension LastUpdated: Decodable { + enum CodingKeys: String, CodingKey { + case timestamp = "lastUpdated" + } +}