Files
amiibo-service/Sources/AmiiboService/Public/Models/Amiibo.swift
T

86 lines
2.2 KiB
Swift
Raw Normal View History

2025-10-07 22:32:54 +00:00
// ===----------------------------------------------------------------------===
//
// This source file is part of the Amiibo Service open source project
//
// Copyright (c) 2025 Röck+Cöde VoF. and the Amiibo Service project authors
// Licensed under Apache license v2.0
//
// See LICENSE for license information
2025-10-07 22:32:54 +00:00
// See CONTRIBUTORS for the list of Amiibo Service project authors
//
2025-10-07 22:32:54 +00:00
// SPDX-License-Identifier: Apache-2.0
//
// ===----------------------------------------------------------------------===
import Foundation
2025-09-09 17:30:19 +00:00
/// A model that represents an amiibo item.
public struct Amiibo: Sendable {
// MARK: Properties
2025-09-09 17:30:19 +00:00
/// A game character.
public let gameCharacter: String
2025-09-09 17:30:19 +00:00
/// A game series.
public let gameSeries: String
2025-09-09 17:30:19 +00:00
/// The first 8 hexadecimal characters of an identifier.
public let head: String
2025-09-09 17:30:19 +00:00
/// An image link.
public let image: String
2025-09-09 17:30:19 +00:00
/// An amiibo name.
public let name: String
2025-09-09 17:30:19 +00:00
/// A game platform type, if any.
public let platform: Platform?
2025-09-09 17:30:19 +00:00
/// A release date.
public let release: Release
2025-09-09 17:30:19 +00:00
/// An amiibo series.
public let series: String
2025-09-09 17:30:19 +00:00
/// The last 8 hexadecimal characters of an identifier.
public let tail: String
2025-09-09 17:30:19 +00:00
/// An amiibo type.
public let type: String
2025-09-09 17:30:19 +00:00
// MARK: Initializers
/// Initializes this model from a given payload.
/// - Parameter payload: A payload that contains the values for the model.
init(_ payload: Components.Schemas.Amiibo) {
self.gameCharacter = payload.character
self.gameSeries = payload.gameSeries
self.head = payload.head
self.image = payload.image
self.name = payload.name
self.platform = .init(
payload.gamesSwitch,
payload.games3DS,
payload.gamesWiiU
)
self.release = .init(payload.release)
self.series = payload.amiiboSeries
self.tail = payload.tail
self.type = payload._type
}
// MARK: Computed
2025-09-09 17:30:19 +00:00
/// An identifier.
public var identifier: String {
head + tail
}
2025-09-09 17:30:19 +00:00
/// A URL related to an image link, if any.
public var imageURL: URL? {
.init(string: image)
}
}