This PR contains the work done to addres the issue #8, related to setting up a EUPL 1.2 license for this project. To provide further details about the work done: - [x] defined the LICENSE text; - [x] defined the CONTRIBUTORS text; - [x] added a header file to source code available in this project. Co-authored-by: Javier Cicchelli <javier@rock-n-code.com> Reviewed-on: #12
150 lines
4.3 KiB
Swift
150 lines
4.3 KiB
Swift
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This source file is part of the AmiiboService open source project
|
|
//
|
|
// Copyright (c) 2023 Röck+Cöde VoF. and the AmiiboService project authors
|
|
// Licensed under the EUPL 1.2 or later.
|
|
//
|
|
// See LICENSE.txt for license information
|
|
// See CONTRIBUTORS.txt for the list of AmiiboService project authors
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
/// This filter provides all the possible parameters (and combinations) available at the remote API applies when filtering amiibos.
|
|
public struct AmiiboFilter {
|
|
|
|
// MARK: Properties
|
|
|
|
private let id: String?
|
|
private let head: String?
|
|
private let tail: String?
|
|
private let name: String?
|
|
private let type: String?
|
|
private let gameSeries: String?
|
|
private let amiiboSeries: String?
|
|
private let character: String?
|
|
private let showExtras: ShowExtras
|
|
|
|
// MARK: Initialisers
|
|
|
|
/// Initialises this filter.
|
|
/// - Parameters:
|
|
/// - id: An amiibo `id` value to match against.
|
|
/// - head: An amiibo `head` value to match against.
|
|
/// - tail: An amiibo `tail` value to match against.
|
|
/// - name: An amiibo `name` value to match against.
|
|
/// - type: An amiibo `type` key or name value to match against.
|
|
/// - gameSeries: An amiibo `gameSeries` key or name value to match against.
|
|
/// - amiiboSeries: An amiibo `amiiboSeries` key or name value to match against.
|
|
/// - character: An amiibo `character` key or name value to match against.
|
|
/// - showExtras: A ``ShowExtras`` enumeration that indicates whether amiibo extra information need to be retrieved or not.
|
|
public init(
|
|
id: String? = nil,
|
|
head: String? = nil,
|
|
tail: String? = nil,
|
|
name: String? = nil,
|
|
type: String? = nil,
|
|
gameSeries: String? = nil,
|
|
amiiboSeries: String? = nil,
|
|
character: String? = nil,
|
|
showExtras: ShowExtras = .none
|
|
) {
|
|
self.id = id
|
|
self.head = head
|
|
self.tail = tail
|
|
self.name = name
|
|
self.type = type
|
|
self.gameSeries = gameSeries
|
|
self.amiiboSeries = amiiboSeries
|
|
self.character = character
|
|
self.showExtras = showExtras
|
|
}
|
|
|
|
}
|
|
|
|
// MARK: - Filter
|
|
|
|
extension AmiiboFilter: Filter {
|
|
|
|
// MARK: Functions
|
|
|
|
func makeParameters() -> [String : String?] {
|
|
var parameters: [String : String?] = [:]
|
|
|
|
if let id {
|
|
parameters[.Key.id] = id
|
|
}
|
|
|
|
if let head {
|
|
parameters[.Key.head] = head
|
|
}
|
|
|
|
if let tail {
|
|
parameters[.Key.tail] = tail
|
|
}
|
|
|
|
if let name {
|
|
parameters[.Key.name] = name
|
|
}
|
|
|
|
if let type {
|
|
parameters[.Key.type] = type
|
|
}
|
|
|
|
if let gameSeries {
|
|
parameters[.Key.gameSeries] = gameSeries
|
|
}
|
|
|
|
if let amiiboSeries {
|
|
parameters[.Key.amiiboSeries] = amiiboSeries
|
|
}
|
|
|
|
if let character {
|
|
parameters[.Key.character] = character
|
|
}
|
|
|
|
switch showExtras {
|
|
case .games:
|
|
parameters[.Key.showGames] = nil
|
|
case .usage:
|
|
parameters[.Key.showUsage] = nil
|
|
default:
|
|
break
|
|
}
|
|
|
|
return parameters
|
|
}
|
|
|
|
}
|
|
|
|
// MARK: - Enumerations
|
|
|
|
extension AmiiboFilter {
|
|
/// This enumeration indicates if extra information for amiibos need to be retrieved.
|
|
public enum ShowExtras {
|
|
/// No extra information needs to be retrieved.
|
|
case none
|
|
/// Amiibo games information needs to be retrieved.
|
|
case games
|
|
/// Amiibo games and its usage information needs to be retrieved.
|
|
case usage
|
|
}
|
|
}
|
|
|
|
// MARK: - String+Key
|
|
|
|
private extension String {
|
|
enum Key {
|
|
static let id = "id"
|
|
static let head = "head"
|
|
static let tail = "tail"
|
|
static let name = "name"
|
|
static let type = "type"
|
|
static let gameSeries = "gameSeries"
|
|
static let amiiboSeries = "amiiboSeries"
|
|
static let character = "character"
|
|
static let showGames = "showgames"
|
|
static let showUsage = "showusage"
|
|
}
|
|
}
|