Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4cbac015b1 | ||
|
|
13b9c74a38 | ||
|
|
44bfaca553 | ||
|
|
aa135cb04a | ||
|
|
0c41e5d4ce |
No files matched your search
@@ -0,0 +1,57 @@
|
|||||||
|
# ===----------------------------------------------------------------------===
|
||||||
|
#
|
||||||
|
# This source file is part of the Amiibo Service open source project
|
||||||
|
#
|
||||||
|
# Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
|
||||||
|
# Licensed under Apache license v2.0
|
||||||
|
#
|
||||||
|
# See LICENSE for license information
|
||||||
|
# See CONTRIBUTORS for the list of Amiibo Service project authors
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
# ===----------------------------------------------------------------------===
|
||||||
|
|
||||||
|
name: CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
pull_request:
|
||||||
|
branches: [main]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ci-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
name: Build and test
|
||||||
|
runs-on: macos-latest
|
||||||
|
steps:
|
||||||
|
- name: Check out
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Select Xcode
|
||||||
|
uses: maxim-lobanov/setup-xcode@v1
|
||||||
|
with:
|
||||||
|
xcode-version: latest-stable
|
||||||
|
|
||||||
|
- name: Show toolchain
|
||||||
|
run: swift --version
|
||||||
|
|
||||||
|
- name: Cache build
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: .build
|
||||||
|
key: spm-${{ runner.os }}-${{ hashFiles('Package.resolved') }}
|
||||||
|
restore-keys: spm-${{ runner.os }}-
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: make lib-build
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
run: make lib-test
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
# ===----------------------------------------------------------------------===
|
||||||
|
#
|
||||||
|
# This source file is part of the Amiibo Service open source project
|
||||||
|
#
|
||||||
|
# Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
|
||||||
|
# Licensed under Apache license v2.0
|
||||||
|
#
|
||||||
|
# See LICENSE for license information
|
||||||
|
# See CONTRIBUTORS for the list of Amiibo Service project authors
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
# ===----------------------------------------------------------------------===
|
||||||
|
|
||||||
|
name: Documentation
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
pull_request:
|
||||||
|
branches: [main]
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: docs-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Build documentation
|
||||||
|
runs-on: macos-latest
|
||||||
|
steps:
|
||||||
|
- name: Check out
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
# Pinned: swift-docc-plugin 1.5.0 fails to launch its tools under Xcode 27 ("Bad CPU type in executable").
|
||||||
|
- name: Select Xcode
|
||||||
|
uses: maxim-lobanov/setup-xcode@v1
|
||||||
|
with:
|
||||||
|
xcode-version: '26'
|
||||||
|
|
||||||
|
- name: Show toolchain
|
||||||
|
run: swift --version
|
||||||
|
|
||||||
|
- name: Cache build
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: .build
|
||||||
|
key: spm-${{ runner.os }}-${{ hashFiles('Package.resolved') }}
|
||||||
|
restore-keys: spm-${{ runner.os }}-
|
||||||
|
|
||||||
|
- name: Generate
|
||||||
|
run: make doc-generate-github
|
||||||
|
|
||||||
|
- name: Upload
|
||||||
|
uses: actions/upload-pages-artifact@v3
|
||||||
|
with:
|
||||||
|
path: docs
|
||||||
|
|
||||||
|
deploy:
|
||||||
|
name: Deploy to GitHub Pages
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
|
needs: build
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
pages: write
|
||||||
|
id-token: write
|
||||||
|
environment:
|
||||||
|
name: github-pages
|
||||||
|
url: ${{ steps.deploy.outputs.page_url }}
|
||||||
|
steps:
|
||||||
|
- name: Deploy
|
||||||
|
id: deploy
|
||||||
|
uses: actions/deploy-pages@v4
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
# ===----------------------------------------------------------------------===
|
||||||
|
#
|
||||||
|
# This source file is part of the Amiibo Service open source project
|
||||||
|
#
|
||||||
|
# Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
|
||||||
|
# Licensed under Apache license v2.0
|
||||||
|
#
|
||||||
|
# See LICENSE for license information
|
||||||
|
# See CONTRIBUTORS for the list of Amiibo Service project authors
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
# ===----------------------------------------------------------------------===
|
||||||
|
|
||||||
|
name: Live tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
# Every Monday at 06:00 UTC.
|
||||||
|
- cron: '0 6 * * 1'
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
name: Test against the live service
|
||||||
|
runs-on: macos-latest
|
||||||
|
steps:
|
||||||
|
- name: Check out
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Select Xcode
|
||||||
|
uses: maxim-lobanov/setup-xcode@v1
|
||||||
|
with:
|
||||||
|
xcode-version: latest-stable
|
||||||
|
|
||||||
|
- name: Show toolchain
|
||||||
|
run: swift --version
|
||||||
|
|
||||||
|
- name: Cache build
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: .build
|
||||||
|
key: spm-${{ runner.os }}-${{ hashFiles('Package.resolved') }}
|
||||||
|
restore-keys: spm-${{ runner.os }}-
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
run: make lib-test
|
||||||
|
env:
|
||||||
|
AMIIBO_LIVE_TESTS: '1'
|
||||||
+2
-1
@@ -48,4 +48,5 @@ Packages/
|
|||||||
.vscode
|
.vscode
|
||||||
|
|
||||||
# DocC documentation
|
# DocC documentation
|
||||||
*.doccarchive
|
*.doccarchive
|
||||||
|
docs/
|
||||||
+6
-3
@@ -1,4 +1,4 @@
|
|||||||
// swift-tools-version: 5.10
|
// swift-tools-version: 6.2
|
||||||
|
|
||||||
// ===----------------------------------------------------------------------===
|
// ===----------------------------------------------------------------------===
|
||||||
//
|
//
|
||||||
@@ -32,9 +32,10 @@ let package = Package(
|
|||||||
)
|
)
|
||||||
],
|
],
|
||||||
dependencies: [
|
dependencies: [
|
||||||
.package(url: "https://github.com/apple/swift-openapi-generator.git", exact: "1.11.0"),
|
.package(url: "https://github.com/apple/swift-openapi-generator.git", from: "1.11.0"),
|
||||||
.package(url: "https://github.com/apple/swift-openapi-runtime", from: "1.5.0"),
|
.package(url: "https://github.com/apple/swift-openapi-runtime", from: "1.5.0"),
|
||||||
.package(url: "https://github.com/apple/swift-openapi-urlsession", from: "1.0.2"),
|
.package(url: "https://github.com/apple/swift-openapi-urlsession", from: "1.0.2"),
|
||||||
|
.package(url: "https://github.com/apple/swift-http-types", from: "1.0.0"),
|
||||||
.package(url: "https://github.com/swiftlang/swift-docc-plugin", from: "1.1.0"),
|
.package(url: "https://github.com/swiftlang/swift-docc-plugin", from: "1.1.0"),
|
||||||
],
|
],
|
||||||
targets: [
|
targets: [
|
||||||
@@ -52,7 +53,9 @@ let package = Package(
|
|||||||
.testTarget(
|
.testTarget(
|
||||||
name: AmiiboService.test,
|
name: AmiiboService.test,
|
||||||
dependencies: [
|
dependencies: [
|
||||||
.byName(name: AmiiboService.target)
|
.byName(name: AmiiboService.target),
|
||||||
|
.product(name: "HTTPTypes", package: "swift-http-types"),
|
||||||
|
.product(name: "OpenAPIRuntime", package: "swift-openapi-runtime")
|
||||||
],
|
],
|
||||||
path: "Tests/AmiiboService"
|
path: "Tests/AmiiboService"
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -1,37 +1,38 @@
|
|||||||
[](https://swiftpackageindex.com/rock-n-code/amiibo-service)
|
[](https://swiftpackageindex.com/rock-n-code/amiibo-service)
|
||||||
[](https://swiftpackageindex.com/rock-n-code/amiibo-service)
|
[](https://swiftpackageindex.com/rock-n-code/amiibo-service)
|
||||||
|
[](https://github.com/rock-n-code/amiibo-service/actions/workflows/ci.yml)
|
||||||
|
|
||||||
# Amiibo Service
|
# Amiibo Service
|
||||||
|
|
||||||
A library written entirely with [Swift](https://www.swift.org) that provides everything the developer needs to interact with the [Amiibo API](https://www.amiiboapi.org) backend service.
|
A Swift client for the [Amiibo API](https://www.amiiboapi.org).
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- Swift 6.2 or later
|
||||||
|
- iOS 13, macOS 10.15, tvOS 13, visionOS 1, or watchOS 6 or later
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
To use this library, add it as a dependency in the `Package.swift` file:
|
Add the package and the `AmiiboService` product to `Package.swift`:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
let package = Package(
|
let package = Package(
|
||||||
// name, platforms, products, etc.
|
// name, platforms, products, etc.
|
||||||
dependencies: [
|
dependencies: [
|
||||||
.package(url: "https://github.com/rock-n-code/amiibo-service", from: "1.4.1"),
|
.package(url: "https://github.com/rock-n-code/amiibo-service", from: "2.0.0"),
|
||||||
// other dependencies
|
|
||||||
],
|
],
|
||||||
targets: [
|
targets: [
|
||||||
.target(
|
.target(
|
||||||
name: "SomeTarget",
|
name: "SomeTarget",
|
||||||
dependencies: [
|
dependencies: [
|
||||||
.product(name: "AmiiboService", package: "amiibo-service"),
|
.product(name: "AmiiboService", package: "amiibo-service"),
|
||||||
]
|
]
|
||||||
)
|
),
|
||||||
// other targets
|
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
It is also possible to use this library with your app in Xcode by adding it as a dependency in your Xcode project.
|
In Xcode, add the package URL under **File › Add Package Dependencies…**.
|
||||||
|
|
||||||
> [!IMPORTANT]
|
|
||||||
> Swift 5.10 or higher is required in order to build this library.
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
@@ -40,25 +41,41 @@ import AmiiboService
|
|||||||
|
|
||||||
let service = AmiiboService()
|
let service = AmiiboService()
|
||||||
|
|
||||||
// Fetch all amiibos
|
// All amiibos
|
||||||
let amiibos = try await service.getAmiibos()
|
let amiibos = try await service.getAmiibos()
|
||||||
|
|
||||||
// Fetch amiibos filtered by name
|
// Amiibos whose name contains "zelda"
|
||||||
let zeldaAmiibos = try await service.getAmiibos(.init(name: "zelda"))
|
let zeldaAmiibos = try await service.getAmiibos(.init(name: "zelda"))
|
||||||
|
|
||||||
// Fetch amiibo series, types, game characters, and game series
|
// Amiibo series, types, game characters, and game series
|
||||||
let series = try await service.getAmiiboSeries()
|
let series = try await service.getAmiiboSeries()
|
||||||
let types = try await service.getAmiiboTypes()
|
let types = try await service.getAmiiboTypes()
|
||||||
let characters = try await service.getGameCharacters()
|
let characters = try await service.getGameCharacters()
|
||||||
let gameSeries = try await service.getGameSeries()
|
let gameSeries = try await service.getGameSeries()
|
||||||
|
|
||||||
// Fetch the last updated timestamp
|
// Date of the last data update (UTC)
|
||||||
let lastUpdated = try await service.getLastUpdated()
|
let lastUpdated = try await service.getLastUpdated()
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Results are sorted in ascending order by identifier (amiibos) or key (everything else). Models are `Hashable`, `Codable`, and `Identifiable`; filters are `Hashable`.
|
||||||
|
|
||||||
|
## Error handling
|
||||||
|
|
||||||
|
Every call throws `AmiiboServiceError`. When nothing matches, `getAmiibos(_:)` returns an empty array, while the other list calls throw `AmiiboServiceError.notFound`:
|
||||||
|
|
||||||
|
```swift
|
||||||
|
do throws(AmiiboServiceError) {
|
||||||
|
let series = try await service.getAmiiboSeries(.init(key: "0x01"))
|
||||||
|
} catch .notFound {
|
||||||
|
// No amiibo series has this key.
|
||||||
|
} catch {
|
||||||
|
// .badRequest, .cancelled, .decoding, .notAvailable, .undocumented, or .unknown
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## Caching
|
## Caching
|
||||||
|
|
||||||
The [Amiibo API](https://www.amiiboapi.org) recommends that consumers who call the API regularly implement caching on their systems. Pass a custom `URLSessionTransport` with a cache-configured `URLSession` to `AmiiboLiveClient`:
|
The library has no built-in cache. The Amiibo API asks regular consumers to cache responses. To do that, give `AmiiboLiveClient` a transport backed by a `URLCache`:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
import OpenAPIURLSession
|
import OpenAPIURLSession
|
||||||
@@ -83,12 +100,12 @@ let service = AmiiboService(
|
|||||||
|
|
||||||
## Testing
|
## Testing
|
||||||
|
|
||||||
The `AmiiboClient` protocol enables creating custom mock clients for unit testing without network calls. Conform to `AmiiboClient` and inject it into `AmiiboService` via its `init(client:)` initializer:
|
To test without network access, pass a mock `AmiiboClient` to `AmiiboService(client:)`. `AmiiboClient` refines `Sendable`, so the mock must be `Sendable`, too:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
import AmiiboService
|
import AmiiboService
|
||||||
|
|
||||||
struct MyMockClient: AmiiboClient {
|
struct MockClient: AmiiboClient {
|
||||||
var error: AmiiboServiceError?
|
var error: AmiiboServiceError?
|
||||||
|
|
||||||
func getAmiibos(
|
func getAmiibos(
|
||||||
@@ -98,12 +115,34 @@ struct MyMockClient: AmiiboClient {
|
|||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
|
|
||||||
// Implement remaining protocol requirements...
|
// Implement the remaining requirements...
|
||||||
}
|
}
|
||||||
|
|
||||||
let service = AmiiboService(client: MyMockClient())
|
let service = AmiiboService(client: MockClient())
|
||||||
|
```
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
Run `make` to list the available tasks for building, testing, and generating documentation.
|
||||||
|
|
||||||
|
The test suite runs offline by default. Tests against the live service run only if `AMIIBO_LIVE_TESTS` is set to `1`:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
AMIIBO_LIVE_TESTS=1 swift test
|
||||||
|
```
|
||||||
|
|
||||||
|
In Xcode, set the variable in the scheme's **Test** action.
|
||||||
|
|
||||||
|
The live tests compare the responses against baselines recorded from the service: minimum item counts per endpoint and the earliest accepted last-updated date. These live in the `Int` extension at the bottom of `AmiiboServiceLiveTests.swift` and in the `get the last updated timestamp` test. Refresh them occasionally by fetching the current totals and the current timestamp from the service, then updating the constants and their `as of` notes:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
for endpoint in amiibo amiiboseries type character gameseries; do
|
||||||
|
printf '%s: ' "$endpoint"
|
||||||
|
curl -s "https://www.amiiboapi.org/api/$endpoint/" | python3 -c 'import json,sys; print(len(json.load(sys.stdin)["amiibo"]))'
|
||||||
|
done
|
||||||
|
curl -s https://www.amiiboapi.org/api/lastupdated/
|
||||||
```
|
```
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
Please refer to the [online documentation](https://rock-n-code.github.io/amiibo-service/documentation/amiiboservice/) for further information about this library.
|
See the [online documentation](https://rock-n-code.github.io/amiibo-service/documentation/amiiboservice/).
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
# ``AmiiboService/AmiiboService``
|
||||||
|
|
||||||
|
## Topics
|
||||||
|
|
||||||
|
### Initializers
|
||||||
|
|
||||||
|
- ``AmiiboService/AmiiboService/init(client:)``
|
||||||
|
|
||||||
|
### Amiibo endpoints
|
||||||
|
|
||||||
|
- ``AmiiboService/AmiiboService/getAmiibos(_:)``
|
||||||
|
- ``AmiiboService/AmiiboService/getAmiiboSeries(_:)``
|
||||||
|
- ``AmiiboService/AmiiboService/getAmiiboTypes(_:)``
|
||||||
|
|
||||||
|
### Game endpoints
|
||||||
|
|
||||||
|
- ``AmiiboService/AmiiboService/getGameCharacters(_:)``
|
||||||
|
- ``AmiiboService/AmiiboService/getGameSeries(_:)``
|
||||||
|
|
||||||
|
### System endpoints
|
||||||
|
|
||||||
|
- ``AmiiboService/AmiiboService/getLastUpdated()``
|
||||||
@@ -16,4 +16,4 @@
|
|||||||
|
|
||||||
- ``AmiiboServiceError/notAvailable``
|
- ``AmiiboServiceError/notAvailable``
|
||||||
- ``AmiiboServiceError/undocumented(_:)``
|
- ``AmiiboServiceError/undocumented(_:)``
|
||||||
- ``AmiiboServiceError/unknown``
|
- ``AmiiboServiceError/unknown(_:)``
|
||||||
@@ -1,49 +1,82 @@
|
|||||||
# ``AmiiboService``
|
# ``AmiiboService``
|
||||||
|
|
||||||
A library that provides everything the developer needs to interact with the **Amiibo API** backend service.
|
A Swift client for the Amiibo API.
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
The `amiibo-service` library is a package that allows the developer to interact with the [Amiibo API](https://www.amiiboapi.org) backend service seamlessly, by not only providing the *service* type but also any possible *models*, *filters*, *errors* and *interfaces* types that might be needed during implementation.
|
`AmiiboService` fetches data from the [Amiibo API](https://www.amiiboapi.org) and returns it as Swift models.
|
||||||
|
|
||||||
## Design
|
``AmiiboService`` offers one method per resource: each takes a typed filter, returns sorted models, and throws ``AmiiboServiceError``.
|
||||||
|
|
||||||
Although it could have been possible to generate a one-to-one RESTful client based on the Open API specification document that describe the available endpoints of the backend service, it was decided to design a `AmiiboService` service type that removes the complexities of the API design imposed by the backend service, and provides the developer with a simple interface, and a seamless experience.
|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
To use the `AmiiboService` library with your package, then add it as a dependency in the `Package.swift` file:
|
Add the package and the `AmiiboService` product to `Package.swift`:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
let package = Package(
|
let package = Package(
|
||||||
// name, platforms, products, etc.
|
// name, platforms, products, etc.
|
||||||
dependencies: [
|
dependencies: [
|
||||||
.package(url: "https://github.com/rock-n-code/amiibo-service", from: "1.4.1"),
|
.package(url: "https://github.com/rock-n-code/amiibo-service", from: "2.0.0"),
|
||||||
// other dependencies
|
|
||||||
],
|
],
|
||||||
targets: [
|
targets: [
|
||||||
.target(
|
.target(
|
||||||
name: "SomeTarget",
|
name: "SomeTarget",
|
||||||
dependencies: [
|
dependencies: [
|
||||||
.product(name: "AmiiboService", package: "amiibo-service"),
|
.product(name: "AmiiboService", package: "amiibo-service"),
|
||||||
]
|
]
|
||||||
)
|
),
|
||||||
// other targets
|
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
It is also possible to use the `AmiiboService` library with your app in Xcode, then add it as a dependency in your Xcode project.
|
In Xcode, add the package URL under **File › Add Package Dependencies…**.
|
||||||
|
|
||||||
> important: Swift 5.10 or higher is required in order to compile this library.
|
> Important: Requires Swift 6.2 or later, and iOS 13, macOS 10.15, tvOS 13, visionOS 1, or watchOS 6 or later.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Create an ``AmiiboService`` and call its methods. When you omit the filter, the method returns every item:
|
||||||
|
|
||||||
|
```swift
|
||||||
|
import AmiiboService
|
||||||
|
|
||||||
|
let service = AmiiboService()
|
||||||
|
|
||||||
|
// All amiibos
|
||||||
|
let amiibos = try await service.getAmiibos()
|
||||||
|
|
||||||
|
// Amiibos whose name contains "zelda"
|
||||||
|
let zeldaAmiibos = try await service.getAmiibos(.init(name: "zelda"))
|
||||||
|
|
||||||
|
// Amiibo series, types, game characters, and game series
|
||||||
|
let series = try await service.getAmiiboSeries()
|
||||||
|
let types = try await service.getAmiiboTypes()
|
||||||
|
let characters = try await service.getGameCharacters()
|
||||||
|
let gameSeries = try await service.getGameSeries()
|
||||||
|
|
||||||
|
// Date of the last data update (UTC)
|
||||||
|
let lastUpdated = try await service.getLastUpdated()
|
||||||
|
```
|
||||||
|
|
||||||
|
Results are sorted in ascending order by ``Amiibo/identifier`` or by `key`.
|
||||||
|
|
||||||
|
## Error handling
|
||||||
|
|
||||||
|
Every method throws ``AmiiboServiceError``. When nothing matches, ``AmiiboService/getAmiibos(_:)`` returns an empty array, while the other list methods throw ``AmiiboServiceError/notFound``:
|
||||||
|
|
||||||
|
```swift
|
||||||
|
do throws(AmiiboServiceError) {
|
||||||
|
let series = try await service.getAmiiboSeries(.init(key: "0x01"))
|
||||||
|
} catch .notFound {
|
||||||
|
// No amiibo series has this key.
|
||||||
|
} catch {
|
||||||
|
// .badRequest, .cancelled, .decoding, .notAvailable, .undocumented, or .unknown
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## Caching
|
## Caching
|
||||||
|
|
||||||
The [Amiibo API](https://www.amiiboapi.org) recommends that consumers who call the API regularly implement caching on their systems. This library does not include a built-in cache, leaving the choice of caching strategy to the consumer. The following examples show two common approaches.
|
The library has no built-in cache, and the Amiibo API asks regular consumers to cache responses. To cache at the HTTP level, give ``AmiiboLiveClient`` a transport backed by a `URLCache`:
|
||||||
|
|
||||||
### URLCache on the transport layer
|
|
||||||
|
|
||||||
Pass a custom `URLSessionTransport` with a cache-configured `URLSession` to ``AmiiboLiveClient``:
|
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
import OpenAPIURLSession
|
import OpenAPIURLSession
|
||||||
@@ -66,20 +99,16 @@ let service = AmiiboService(
|
|||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
This leverages HTTP cache headers from the server and persists cached responses to disk.
|
Models are `Codable`, so you can also store them yourself.
|
||||||
|
|
||||||
### Application-level caching
|
|
||||||
|
|
||||||
Alternatively, cache the results returned by ``AmiiboService`` directly in your application using any storage mechanism that fits your needs, such as an in-memory dictionary, a database, or a file-based store.
|
|
||||||
|
|
||||||
## Testing
|
## Testing
|
||||||
|
|
||||||
The ``AmiiboClient`` protocol enables creating custom mock clients for testing, eliminating the need for network calls in unit tests. Conform to ``AmiiboClient`` and return stubbed data or throw ``AmiiboServiceError`` errors to verify your application's behavior:
|
To test without network access, pass a mock ``AmiiboClient`` to ``AmiiboService/init(client:)``. ``AmiiboClient`` refines `Sendable`, so the mock must be `Sendable`, too:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
import AmiiboService
|
import AmiiboService
|
||||||
|
|
||||||
struct MyMockClient: AmiiboClient {
|
struct MockClient: AmiiboClient {
|
||||||
var error: AmiiboServiceError?
|
var error: AmiiboServiceError?
|
||||||
|
|
||||||
func getAmiibos(
|
func getAmiibos(
|
||||||
@@ -89,22 +118,10 @@ struct MyMockClient: AmiiboClient {
|
|||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
|
|
||||||
// Implement remaining protocol requirements...
|
// Implement the remaining requirements...
|
||||||
}
|
}
|
||||||
|
|
||||||
let service = AmiiboService(client: MyMockClient())
|
let service = AmiiboService(client: MockClient())
|
||||||
```
|
|
||||||
|
|
||||||
Inject the mock client into ``AmiiboService`` via its ``AmiiboService/init(client:)`` initializer to test how your code handles empty results, specific errors, or any other scenario without relying on the live backend.
|
|
||||||
|
|
||||||
## Tasks
|
|
||||||
|
|
||||||
This library offers a set of ready-to-use tasks that simplify the interaction with the library, which the developer can use from any `Terminal` application.
|
|
||||||
|
|
||||||
> Tip: To show the available list of tasks, plus display some explanations about each and every one of them; please enter the following command:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ make
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Topics
|
## Topics
|
||||||
|
|||||||
@@ -18,25 +18,26 @@ extension DateFormatter {
|
|||||||
|
|
||||||
// MARK: Properties
|
// MARK: Properties
|
||||||
|
|
||||||
/// An ISO date formatter.
|
/// An ISO date formatter for the `yyyy-MM-dd` format.
|
||||||
///
|
|
||||||
/// This formatter implements the `yyyy-MM-dd` date format.
|
|
||||||
static let isoDate: DateFormatter = {
|
static let isoDate: DateFormatter = {
|
||||||
let formatter = DateFormatter()
|
let formatter = DateFormatter()
|
||||||
|
|
||||||
|
// The POSIX locale keeps the user's locale and 12/24-hour setting from altering fixed-format parsing.
|
||||||
|
formatter.locale = .init(identifier: "en_US_POSIX")
|
||||||
formatter.dateFormat = "yyyy-MM-dd"
|
formatter.dateFormat = "yyyy-MM-dd"
|
||||||
formatter.timeZone = .init(secondsFromGMT: 0)
|
formatter.timeZone = .init(secondsFromGMT: 0)
|
||||||
|
|
||||||
return formatter
|
return formatter
|
||||||
}()
|
}()
|
||||||
|
|
||||||
/// An ISO timestamp formatter.
|
/// An ISO timestamp formatter for the `yyyy-MM-dd'T'HH:mm:ss.SSSSSS` format.
|
||||||
///
|
///
|
||||||
/// This formatter implements the `yyyy-MM-dd'T'HH:mm:ss.SSSSSS` custom date format.
|
/// Used only to decode the timestamp returned by ``AmiiboService/getLastUpdated()``.
|
||||||
/// Within the context of this library, this formatter is solely used to decode a date formatted as a timestamp that is returned by the ``AmiiboService/getLastUpdated()`` function.
|
|
||||||
static let isoTimestamp: DateFormatter = {
|
static let isoTimestamp: DateFormatter = {
|
||||||
let formatter = DateFormatter()
|
let formatter = DateFormatter()
|
||||||
|
|
||||||
|
// The POSIX locale keeps the user's locale and 12/24-hour setting from altering fixed-format parsing.
|
||||||
|
formatter.locale = .init(identifier: "en_US_POSIX")
|
||||||
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSS"
|
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSS"
|
||||||
formatter.timeZone = .init(secondsFromGMT: 0)
|
formatter.timeZone = .init(secondsFromGMT: 0)
|
||||||
|
|
||||||
|
|||||||
@@ -12,8 +12,8 @@
|
|||||||
//
|
//
|
||||||
// ===----------------------------------------------------------------------===
|
// ===----------------------------------------------------------------------===
|
||||||
|
|
||||||
/// A protocol that defines filters containing optional `key` and/or `name` values for querying resources.
|
/// A protocol for filters with optional `key` and `name` values.
|
||||||
protocol KeyNameFilter {
|
protocol KeyNameFilter: Hashable {
|
||||||
|
|
||||||
// MARK: Properties
|
// MARK: Properties
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
// ===----------------------------------------------------------------------===
|
// ===----------------------------------------------------------------------===
|
||||||
|
|
||||||
/// A protocol that defines models containing a `key` and `name` pair.
|
/// A protocol that defines models containing a `key` and `name` pair.
|
||||||
protocol KeyNameModel: Sendable, Hashable {
|
protocol KeyNameModel: Sendable, Hashable, Codable, Identifiable {
|
||||||
|
|
||||||
// MARK: Properties
|
// MARK: Properties
|
||||||
|
|
||||||
@@ -27,6 +27,6 @@ protocol KeyNameModel: Sendable, Hashable {
|
|||||||
|
|
||||||
/// Initializes this model from a given payload.
|
/// Initializes this model from a given payload.
|
||||||
/// - Parameter payload: A payload that contains the values for the model.
|
/// - Parameter payload: A payload that contains the values for the model.
|
||||||
init(_ payload: Components.Schemas.Tuple)
|
init(_ payload: some KeyNamePayload)
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
// ===----------------------------------------------------------------------===
|
||||||
|
//
|
||||||
|
// This source file is part of the Amiibo Service open source project
|
||||||
|
//
|
||||||
|
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
|
||||||
|
// Licensed under Apache license v2.0
|
||||||
|
//
|
||||||
|
// See LICENSE for license information
|
||||||
|
// See CONTRIBUTORS for the list of Amiibo Service project authors
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
//
|
||||||
|
// ===----------------------------------------------------------------------===
|
||||||
|
|
||||||
|
/// A protocol that unifies the generated payload types containing a `key` and `name` pair.
|
||||||
|
protocol KeyNamePayload {
|
||||||
|
|
||||||
|
// MARK: Properties
|
||||||
|
|
||||||
|
/// A hexadecimal key that uniquely identifies this payload.
|
||||||
|
var key: String { get }
|
||||||
|
|
||||||
|
/// A display name for this payload.
|
||||||
|
var name: String { get }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Conformances
|
||||||
|
|
||||||
|
extension Components.Schemas.AmiiboSeries: KeyNamePayload {}
|
||||||
|
extension Components.Schemas.AmiiboType: KeyNamePayload {}
|
||||||
|
extension Components.Schemas.GameCharacter: KeyNamePayload {}
|
||||||
|
extension Components.Schemas.GameSeries: KeyNamePayload {}
|
||||||
@@ -15,15 +15,15 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import OpenAPIRuntime
|
import OpenAPIRuntime
|
||||||
|
|
||||||
/// A type that allows the decoding and encoding of ISO dates, supporting both the `yyyy-MM-dd'T'HH:mm:ss.SSSSSS` timestamp format and the `yyyy-MM-dd` date-only format.
|
/// A transcoder for ISO dates in the `yyyy-MM-dd'T'HH:mm:ss.SSSSSS` timestamp and `yyyy-MM-dd` date-only formats.
|
||||||
struct ISODateTimeTranscoder {
|
struct ISODateTimeTranscoder {
|
||||||
|
|
||||||
// MARK: Properties
|
// MARK: Properties
|
||||||
|
|
||||||
/// A formatter to use to decode and encode ISO timestamp dates.
|
/// The ISO timestamp formatter.
|
||||||
private let timestampFormatter: DateFormatter = .isoTimestamp
|
private let timestampFormatter: DateFormatter = .isoTimestamp
|
||||||
|
|
||||||
/// A formatter to use to decode and encode ISO date-only strings.
|
/// The ISO date-only formatter.
|
||||||
private let dateFormatter: DateFormatter = .isoDate
|
private let dateFormatter: DateFormatter = .isoDate
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -34,17 +34,13 @@ extension ISODateTimeTranscoder: DateTranscoder {
|
|||||||
|
|
||||||
// MARK: Functions
|
// MARK: Functions
|
||||||
|
|
||||||
/// Encodes a date into an ISO timestamp string.
|
/// Encodes a date as an ISO timestamp string.
|
||||||
/// - Parameter date: A date to encode.
|
|
||||||
/// - Returns: A string representation of the date in `yyyy-MM-dd'T'HH:mm:ss.SSSSSS` format.
|
|
||||||
func encode(_ date: Date) throws -> String {
|
func encode(_ date: Date) throws -> String {
|
||||||
timestampFormatter.string(from: date)
|
timestampFormatter.string(from: date)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Decodes an ISO date string into a date, trying the timestamp format first and falling back to the date-only format.
|
/// Decodes an ISO date string, trying the timestamp format before the date-only one.
|
||||||
/// - Parameter string: A string to decode.
|
/// - Throws: A `DecodingError` if the string matches neither format.
|
||||||
/// - Returns: A date parsed from the string.
|
|
||||||
/// - Throws: A `DecodingError` if the string cannot be parsed into a valid date.
|
|
||||||
func decode(_ string: String) throws -> Date {
|
func decode(_ string: String) throws -> Date {
|
||||||
if let date = timestampFormatter.date(from: string) {
|
if let date = timestampFormatter.date(from: string) {
|
||||||
return date
|
return date
|
||||||
|
|||||||
@@ -16,9 +16,24 @@ import Foundation
|
|||||||
import OpenAPIRuntime
|
import OpenAPIRuntime
|
||||||
import OpenAPIURLSession
|
import OpenAPIURLSession
|
||||||
|
|
||||||
/// A type that implements a live client to the [Amiibo API](https://www.amiiboapi.org) online service.
|
/// A live client for the [Amiibo API](https://www.amiiboapi.org).
|
||||||
|
///
|
||||||
|
/// It maps transport errors and unsuccessful responses to ``AmiiboServiceError``, and sorts list results by identifier or key.
|
||||||
public struct AmiiboLiveClient: Sendable {
|
public struct AmiiboLiveClient: Sendable {
|
||||||
|
|
||||||
|
// MARK: Constants
|
||||||
|
|
||||||
|
/// The base URL of the live service, from the OpenAPI specification.
|
||||||
|
///
|
||||||
|
/// A unit test guards this URL, so resolution is not expected to fail at runtime.
|
||||||
|
static let serverURL: URL = {
|
||||||
|
guard let url = try? Servers.Server1.url() else {
|
||||||
|
fatalError("The server URL defined in the OpenAPI specification could not be resolved. Verify that the 'openapi.yaml' server definition is valid.")
|
||||||
|
}
|
||||||
|
|
||||||
|
return url
|
||||||
|
}()
|
||||||
|
|
||||||
// MARK: Properties
|
// MARK: Properties
|
||||||
|
|
||||||
/// A client generated by the OpenAPI Runtime library to perform API calls.
|
/// A client generated by the OpenAPI Runtime library to perform API calls.
|
||||||
@@ -26,15 +41,11 @@ public struct AmiiboLiveClient: Sendable {
|
|||||||
|
|
||||||
// MARK: Initializers
|
// MARK: Initializers
|
||||||
|
|
||||||
/// Initializes this client with a transport for performing HTTP operations.
|
/// Initializes this client.
|
||||||
/// - Parameter transport: A transport that performs HTTP operations. Defaults to a `URLSessionTransport` using the shared session.
|
/// - Parameter transport: A transport for HTTP operations. Defaults to a `URLSessionTransport` on the shared session.
|
||||||
public init(transport: any ClientTransport = URLSessionTransport()) {
|
public init(transport: any ClientTransport = URLSessionTransport()) {
|
||||||
guard let serverURL = try? Servers.Server1.url() else {
|
|
||||||
fatalError("The server URL defined in the OpenAPI specification could not be resolved. Verify that the 'openapi.yaml' server definition is valid.")
|
|
||||||
}
|
|
||||||
|
|
||||||
self.client = .init(
|
self.client = .init(
|
||||||
serverURL: serverURL,
|
serverURL: Self.serverURL,
|
||||||
configuration: .init(dateTranscoder: ISODateTimeTranscoder()),
|
configuration: .init(dateTranscoder: ISODateTimeTranscoder()),
|
||||||
transport: transport
|
transport: transport
|
||||||
)
|
)
|
||||||
@@ -43,17 +54,17 @@ public struct AmiiboLiveClient: Sendable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - AmiiboClient
|
// MARK: - AmiiboClient
|
||||||
// TODO: Remove the documentation from the functions inside the following extension as the `--enable-inherited-docs` flag when generating DocC documentation is not working as intended (?).
|
// NOTE: The `AmiiboClient` documentation is repeated below on purpose, as the compiler does not inherit
|
||||||
|
// documentation for protocol witnesses and DocC would otherwise render these functions undocumented.
|
||||||
|
|
||||||
extension AmiiboLiveClient: AmiiboClient {
|
extension AmiiboLiveClient: AmiiboClient {
|
||||||
|
|
||||||
// MARK: Functions
|
// MARK: Functions
|
||||||
|
|
||||||
#if swift(>=6.0)
|
|
||||||
/// Gets a list of amiibo items based on a given filter.
|
/// Gets a list of amiibo items based on a given filter.
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
/// - Parameter filter: A filter for the result.
|
||||||
/// - Returns: A list of filtered amiibo items.
|
/// - Returns: A list of filtered amiibo items.
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
/// - Throws: An ``AmiiboServiceError`` if the call fails.
|
||||||
public func getAmiibos(
|
public func getAmiibos(
|
||||||
by filter: AmiiboFilter
|
by filter: AmiiboFilter
|
||||||
) async throws(AmiiboServiceError) -> [Amiibo] {
|
) async throws(AmiiboServiceError) -> [Amiibo] {
|
||||||
@@ -61,9 +72,9 @@ extension AmiiboLiveClient: AmiiboClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Gets a list of amiibo series based on a given filter.
|
/// Gets a list of amiibo series based on a given filter.
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
/// - Parameter filter: A filter for the result.
|
||||||
/// - Returns: A list of filtered amiibo series.
|
/// - Returns: A list of filtered amiibo series.
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
/// - Throws: An ``AmiiboServiceError`` if the call fails.
|
||||||
public func getAmiiboSeries(
|
public func getAmiiboSeries(
|
||||||
by filter: AmiiboSeriesFilter
|
by filter: AmiiboSeriesFilter
|
||||||
) async throws(AmiiboServiceError) -> [AmiiboSeries] {
|
) async throws(AmiiboServiceError) -> [AmiiboSeries] {
|
||||||
@@ -71,9 +82,9 @@ extension AmiiboLiveClient: AmiiboClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Gets a list of amiibo types based on a given filter.
|
/// Gets a list of amiibo types based on a given filter.
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
/// - Parameter filter: A filter for the result.
|
||||||
/// - Returns: A list of filtered amiibo types.
|
/// - Returns: A list of filtered amiibo types.
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
/// - Throws: An ``AmiiboServiceError`` if the call fails.
|
||||||
public func getAmiiboTypes(
|
public func getAmiiboTypes(
|
||||||
by filter: AmiiboTypeFilter
|
by filter: AmiiboTypeFilter
|
||||||
) async throws(AmiiboServiceError) -> [AmiiboType] {
|
) async throws(AmiiboServiceError) -> [AmiiboType] {
|
||||||
@@ -81,9 +92,9 @@ extension AmiiboLiveClient: AmiiboClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Gets a list of game characters based on a given filter.
|
/// Gets a list of game characters based on a given filter.
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
/// - Parameter filter: A filter for the result.
|
||||||
/// - Returns: A list of filtered game characters.
|
/// - Returns: A list of filtered game characters.
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
/// - Throws: An ``AmiiboServiceError`` if the call fails.
|
||||||
public func getGameCharacters(
|
public func getGameCharacters(
|
||||||
by filter: GameCharacterFilter
|
by filter: GameCharacterFilter
|
||||||
) async throws(AmiiboServiceError) -> [GameCharacter] {
|
) async throws(AmiiboServiceError) -> [GameCharacter] {
|
||||||
@@ -91,9 +102,9 @@ extension AmiiboLiveClient: AmiiboClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Gets a list of game series based on a given filter.
|
/// Gets a list of game series based on a given filter.
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
/// - Parameter filter: A filter for the result.
|
||||||
/// - Returns: A list of filtered game series.
|
/// - Returns: A list of filtered game series.
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
/// - Throws: An ``AmiiboServiceError`` if the call fails.
|
||||||
public func getGameSeries(
|
public func getGameSeries(
|
||||||
by filter: GameSeriesFilter
|
by filter: GameSeriesFilter
|
||||||
) async throws(AmiiboServiceError) -> [GameSeries] {
|
) async throws(AmiiboServiceError) -> [GameSeries] {
|
||||||
@@ -101,69 +112,11 @@ extension AmiiboLiveClient: AmiiboClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Gets the date when the data was last updated.
|
/// Gets the date when the data was last updated.
|
||||||
/// - Returns: A last updated date.
|
/// - Returns: A last updated date, decoded as UTC.
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
/// - Throws: An ``AmiiboServiceError`` if the call fails.
|
||||||
public func getLastUpdated() async throws(AmiiboServiceError) -> Date {
|
public func getLastUpdated() async throws(AmiiboServiceError) -> Date {
|
||||||
try await fetchLastUpdated()
|
try await fetchLastUpdated()
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
/// Gets a list of amiibo items based on a given filter.
|
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
|
||||||
/// - Returns: A list of filtered amiibo items.
|
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
|
||||||
public func getAmiibos(
|
|
||||||
by filter: AmiiboFilter
|
|
||||||
) async throws -> [Amiibo] {
|
|
||||||
try await fetchAmiibos(filter)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Gets a list of amiibo series based on a given filter.
|
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
|
||||||
/// - Returns: A list of filtered amiibo series.
|
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
|
||||||
public func getAmiiboSeries(
|
|
||||||
by filter: AmiiboSeriesFilter
|
|
||||||
) async throws -> [AmiiboSeries] {
|
|
||||||
try await fetchAmiiboSeries(filter)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Gets a list of amiibo types based on a given filter.
|
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
|
||||||
/// - Returns: A list of filtered amiibo types.
|
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
|
||||||
public func getAmiiboTypes(
|
|
||||||
by filter: AmiiboTypeFilter
|
|
||||||
) async throws -> [AmiiboType] {
|
|
||||||
try await fetchAmiiboTypes(filter)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Gets a list of game characters based on a given filter.
|
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
|
||||||
/// - Returns: A list of filtered game characters.
|
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
|
||||||
public func getGameCharacters(
|
|
||||||
by filter: GameCharacterFilter
|
|
||||||
) async throws -> [GameCharacter] {
|
|
||||||
try await fetchGameCharacters(filter)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Gets a list of game series based on a given filter.
|
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
|
||||||
/// - Returns: A list of filtered game series.
|
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
|
||||||
public func getGameSeries(
|
|
||||||
by filter: GameSeriesFilter
|
|
||||||
) async throws -> [GameSeries] {
|
|
||||||
try await fetchGameSeries(filter)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Gets the date when the data was last updated.
|
|
||||||
/// - Returns: A last updated date.
|
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
|
||||||
public func getLastUpdated() async throws -> Date {
|
|
||||||
try await fetchLastUpdated()
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -173,17 +126,12 @@ private extension AmiiboLiveClient {
|
|||||||
|
|
||||||
// MARK: Functions
|
// MARK: Functions
|
||||||
|
|
||||||
/// Fetches a list of amiibo items based on a given filter.
|
/// Fetches the amiibos matching a filter.
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
|
||||||
/// - Returns: A list of fetched amiibo items filtered, if requested.
|
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
|
||||||
func fetchAmiibos(
|
func fetchAmiibos(
|
||||||
_ filter: AmiiboFilter
|
_ filter: AmiiboFilter
|
||||||
) async throws -> [Amiibo] {
|
) async throws(AmiiboServiceError) -> [Amiibo] {
|
||||||
let response: Operations.getAmiibos.Output
|
let response = try await perform {
|
||||||
|
try await client.getAmiibos(.init(query: .init(
|
||||||
do {
|
|
||||||
response = try await client.getAmiibos(.init(query: .init(
|
|
||||||
id: filter.identifier,
|
id: filter.identifier,
|
||||||
head: filter.head,
|
head: filter.head,
|
||||||
tail: filter.tail,
|
tail: filter.tail,
|
||||||
@@ -195,8 +143,6 @@ private extension AmiiboLiveClient {
|
|||||||
showgames: filter.showGames,
|
showgames: filter.showGames,
|
||||||
showusage: filter.showUsage
|
showusage: filter.showUsage
|
||||||
)))
|
)))
|
||||||
} catch {
|
|
||||||
try handle(error: error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch response {
|
switch response {
|
||||||
@@ -206,11 +152,12 @@ private extension AmiiboLiveClient {
|
|||||||
switch output.amiibo {
|
switch output.amiibo {
|
||||||
case let .Amiibo(object):
|
case let .Amiibo(object):
|
||||||
return [Amiibo(object)]
|
return [Amiibo(object)]
|
||||||
case let .case2(list):
|
case let .AmiiboList(list):
|
||||||
return list
|
return list
|
||||||
.map { Amiibo($0) }
|
.map { Amiibo($0) }
|
||||||
.sorted { $0.identifier < $1.identifier }
|
.sorted { $0.identifier < $1.identifier }
|
||||||
case .none:
|
case .none:
|
||||||
|
// The service returns `"amiibo": null` when an `id` filter matches nothing.
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -225,22 +172,15 @@ private extension AmiiboLiveClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Fetches a list of amiibo series based on a given filter.
|
/// Fetches the amiibo series matching a filter.
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
|
||||||
/// - Returns: A list of fetched amiibo series filtered, if requested.
|
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
|
||||||
func fetchAmiiboSeries(
|
func fetchAmiiboSeries(
|
||||||
_ filter: AmiiboSeriesFilter
|
_ filter: AmiiboSeriesFilter
|
||||||
) async throws -> [AmiiboSeries] {
|
) async throws(AmiiboServiceError) -> [AmiiboSeries] {
|
||||||
let response: Operations.getAmiiboSeries.Output
|
let response = try await perform {
|
||||||
|
try await client.getAmiiboSeries(.init(query: .init(
|
||||||
do {
|
|
||||||
response = try await client.getAmiiboSeries(.init(query: .init(
|
|
||||||
key: filter.key,
|
key: filter.key,
|
||||||
name: filter.name
|
name: filter.name
|
||||||
)))
|
)))
|
||||||
} catch {
|
|
||||||
try handle(error: error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch response {
|
switch response {
|
||||||
@@ -249,11 +189,9 @@ private extension AmiiboLiveClient {
|
|||||||
case let .json(output):
|
case let .json(output):
|
||||||
switch output.amiibo {
|
switch output.amiibo {
|
||||||
case let .AmiiboSeries(payload):
|
case let .AmiiboSeries(payload):
|
||||||
return [AmiiboSeries(payload.value1)]
|
return makeModels(from: [payload])
|
||||||
case let .case2(list):
|
case let .AmiiboSeriesList(list):
|
||||||
return list
|
return makeModels(from: list)
|
||||||
.map { AmiiboSeries($0.value1) }
|
|
||||||
.sorted { $0.key < $1.key }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case .badRequest:
|
case .badRequest:
|
||||||
@@ -267,22 +205,15 @@ private extension AmiiboLiveClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Fetches a list of amiibo types based on a given filter.
|
/// Fetches the amiibo types matching a filter.
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
|
||||||
/// - Returns: A list of fetched amiibo types filtered, if requested.
|
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
|
||||||
func fetchAmiiboTypes(
|
func fetchAmiiboTypes(
|
||||||
_ filter: AmiiboTypeFilter
|
_ filter: AmiiboTypeFilter
|
||||||
) async throws -> [AmiiboType] {
|
) async throws(AmiiboServiceError) -> [AmiiboType] {
|
||||||
let response: Operations.getAmiiboTypes.Output
|
let response = try await perform {
|
||||||
|
try await client.getAmiiboTypes(.init(query: .init(
|
||||||
do {
|
|
||||||
response = try await client.getAmiiboTypes(.init(query: .init(
|
|
||||||
key: filter.key,
|
key: filter.key,
|
||||||
name: filter.name
|
name: filter.name
|
||||||
)))
|
)))
|
||||||
} catch {
|
|
||||||
try handle(error: error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch response {
|
switch response {
|
||||||
@@ -291,11 +222,9 @@ private extension AmiiboLiveClient {
|
|||||||
case let .json(output):
|
case let .json(output):
|
||||||
switch output.amiibo {
|
switch output.amiibo {
|
||||||
case let .AmiiboType(payload):
|
case let .AmiiboType(payload):
|
||||||
return [AmiiboType(payload.value1)]
|
return makeModels(from: [payload])
|
||||||
case let .case2(list):
|
case let .AmiiboTypeList(list):
|
||||||
return list
|
return makeModels(from: list)
|
||||||
.map { AmiiboType($0.value1) }
|
|
||||||
.sorted { $0.key < $1.key }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case .badRequest:
|
case .badRequest:
|
||||||
@@ -309,22 +238,15 @@ private extension AmiiboLiveClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Fetches a list of game characters based on a given filter.
|
/// Fetches the game characters matching a filter.
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
|
||||||
/// - Returns: A list of fetched game characters filtered, if requested.
|
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
|
||||||
func fetchGameCharacters(
|
func fetchGameCharacters(
|
||||||
_ filter: GameCharacterFilter
|
_ filter: GameCharacterFilter
|
||||||
) async throws -> [GameCharacter] {
|
) async throws(AmiiboServiceError) -> [GameCharacter] {
|
||||||
let response: Operations.getGameCharacters.Output
|
let response = try await perform {
|
||||||
|
try await client.getGameCharacters(.init(query: .init(
|
||||||
do {
|
|
||||||
response = try await client.getGameCharacters(.init(query: .init(
|
|
||||||
key: filter.key,
|
key: filter.key,
|
||||||
name: filter.name
|
name: filter.name
|
||||||
)))
|
)))
|
||||||
} catch {
|
|
||||||
try handle(error: error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch response {
|
switch response {
|
||||||
@@ -333,11 +255,9 @@ private extension AmiiboLiveClient {
|
|||||||
case let .json(output):
|
case let .json(output):
|
||||||
switch output.amiibo {
|
switch output.amiibo {
|
||||||
case let .GameCharacter(payload):
|
case let .GameCharacter(payload):
|
||||||
return [GameCharacter(payload.value1)]
|
return makeModels(from: [payload])
|
||||||
case let .case2(list):
|
case let .GameCharacterList(list):
|
||||||
return list
|
return makeModels(from: list)
|
||||||
.map { GameCharacter($0.value1) }
|
|
||||||
.sorted { $0.key < $1.key }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case .badRequest:
|
case .badRequest:
|
||||||
@@ -351,22 +271,15 @@ private extension AmiiboLiveClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Fetches a list of game series based on a given filter.
|
/// Fetches the game series matching a filter.
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
|
||||||
/// - Returns: A list of fetched game series filtered, if requested.
|
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
|
||||||
func fetchGameSeries(
|
func fetchGameSeries(
|
||||||
_ filter: GameSeriesFilter
|
_ filter: GameSeriesFilter
|
||||||
) async throws -> [GameSeries] {
|
) async throws(AmiiboServiceError) -> [GameSeries] {
|
||||||
let response: Operations.getGameSeries.Output
|
let response = try await perform {
|
||||||
|
try await client.getGameSeries(.init(query: .init(
|
||||||
do {
|
|
||||||
response = try await client.getGameSeries(.init(query: .init(
|
|
||||||
key: filter.key,
|
key: filter.key,
|
||||||
name: filter.name
|
name: filter.name
|
||||||
)))
|
)))
|
||||||
} catch {
|
|
||||||
try handle(error: error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch response {
|
switch response {
|
||||||
@@ -375,11 +288,9 @@ private extension AmiiboLiveClient {
|
|||||||
case let .json(output):
|
case let .json(output):
|
||||||
switch output.amiibo {
|
switch output.amiibo {
|
||||||
case let .GameSeries(payload):
|
case let .GameSeries(payload):
|
||||||
return [GameSeries(payload.value1)]
|
return makeModels(from: [payload])
|
||||||
case let .case2(list):
|
case let .GameSeriesList(list):
|
||||||
return list
|
return makeModels(from: list)
|
||||||
.map { GameSeries($0.value1) }
|
|
||||||
.sorted { $0.key < $1.key }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case .badRequest:
|
case .badRequest:
|
||||||
@@ -394,15 +305,9 @@ private extension AmiiboLiveClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Fetches the date when the data was last updated.
|
/// Fetches the date when the data was last updated.
|
||||||
/// - Returns: A fetched last updated date.
|
func fetchLastUpdated() async throws(AmiiboServiceError) -> Date {
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
let response = try await perform {
|
||||||
func fetchLastUpdated() async throws -> Date {
|
try await client.getLastUpdated()
|
||||||
let response: Operations.getLastUpdated.Output
|
|
||||||
|
|
||||||
do {
|
|
||||||
response = try await client.getLastUpdated()
|
|
||||||
} catch {
|
|
||||||
try handle(error: error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch response {
|
switch response {
|
||||||
@@ -418,34 +323,60 @@ private extension AmiiboLiveClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Maps a given error to an ``AmiiboServiceError`` error.
|
/// Performs an API call, mapping any error to an ``AmiiboServiceError``.
|
||||||
/// - Parameter error: An error to map.
|
func perform<Output>(
|
||||||
/// - Throws: An ``AmiiboServiceError`` error that corresponds to the given error.
|
_ operation: () async throws -> Output
|
||||||
func handle(error: any Error) throws -> Never {
|
) async throws(AmiiboServiceError) -> Output {
|
||||||
|
do {
|
||||||
|
return try await operation()
|
||||||
|
} catch {
|
||||||
|
try handle(error: error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Maps key-name payloads into models sorted by key.
|
||||||
|
func makeModels<Model: KeyNameModel>(from payloads: [some KeyNamePayload]) -> [Model] {
|
||||||
|
payloads
|
||||||
|
.map { Model($0) }
|
||||||
|
.sorted { $0.key < $1.key }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Maps an error to the corresponding ``AmiiboServiceError``.
|
||||||
|
func handle(error: any Error) throws(AmiiboServiceError) -> Never {
|
||||||
switch error {
|
switch error {
|
||||||
case is CancellationError:
|
case is CancellationError:
|
||||||
throw AmiiboServiceError.cancelled
|
throw AmiiboServiceError.cancelled
|
||||||
case let clientError as ClientError:
|
case let clientError as ClientError:
|
||||||
|
// The underlying client wraps every error, including cancellation, in a `ClientError`.
|
||||||
switch clientError.underlyingError {
|
switch clientError.underlyingError {
|
||||||
|
case is CancellationError:
|
||||||
|
throw AmiiboServiceError.cancelled
|
||||||
case is DecodingError:
|
case is DecodingError:
|
||||||
throw AmiiboServiceError.decoding
|
throw AmiiboServiceError.decoding
|
||||||
case let urlError as URLError:
|
case let urlError as URLError:
|
||||||
switch urlError.code {
|
switch urlError.code {
|
||||||
|
case .cancelled:
|
||||||
|
throw AmiiboServiceError.cancelled
|
||||||
|
case .cannotParseResponse:
|
||||||
|
throw AmiiboServiceError.decoding
|
||||||
case .cannotFindHost,
|
case .cannotFindHost,
|
||||||
.cannotConnectToHost,
|
.cannotConnectToHost,
|
||||||
|
.dataNotAllowed,
|
||||||
.dnsLookupFailed,
|
.dnsLookupFailed,
|
||||||
|
.internationalRoamingOff,
|
||||||
.networkConnectionLost,
|
.networkConnectionLost,
|
||||||
.notConnectedToInternet,
|
.notConnectedToInternet,
|
||||||
|
.secureConnectionFailed,
|
||||||
.timedOut:
|
.timedOut:
|
||||||
throw AmiiboServiceError.notAvailable
|
throw AmiiboServiceError.notAvailable
|
||||||
default:
|
default:
|
||||||
throw AmiiboServiceError.unknown
|
throw AmiiboServiceError.unknown(String(describing: urlError))
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
throw AmiiboServiceError.unknown
|
throw AmiiboServiceError.unknown(String(describing: clientError.underlyingError))
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
throw AmiiboServiceError.unknown
|
throw AmiiboServiceError.unknown(String(describing: error))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
/// A representation of all the possible errors that the ``AmiiboService`` service could throw.
|
/// An error thrown by ``AmiiboService`` and ``AmiiboClient`` methods.
|
||||||
public enum AmiiboServiceError: Error {
|
public enum AmiiboServiceError: Error {
|
||||||
/// The request was malformed or contained invalid filter parameters.
|
/// The request was malformed or contained invalid filter parameters.
|
||||||
case badRequest
|
case badRequest
|
||||||
@@ -22,14 +22,16 @@ public enum AmiiboServiceError: Error {
|
|||||||
case cancelled
|
case cancelled
|
||||||
/// The response body could not be decoded into the expected model.
|
/// The response body could not be decoded into the expected model.
|
||||||
case decoding
|
case decoding
|
||||||
/// The backend service is currently unreachable due to a network or server issue.
|
/// The service is unreachable due to a network or server issue.
|
||||||
case notAvailable
|
case notAvailable
|
||||||
/// No results were found matching the given filter criteria.
|
/// No results were found matching the given filter criteria.
|
||||||
|
///
|
||||||
|
/// When no amiibos match, ``AmiiboService/getAmiibos(_:)`` returns an empty array instead of throwing this error.
|
||||||
case notFound
|
case notFound
|
||||||
/// The server returned an undocumented HTTP status code.
|
/// The server returned an undocumented HTTP status code.
|
||||||
case undocumented(_ statusCode: Int)
|
case undocumented(_ statusCode: Int)
|
||||||
/// An unexpected error that does not fall into any other category.
|
/// Any other error, with a description of the underlying one.
|
||||||
case unknown
|
case unknown(_ description: String)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Equatable
|
// MARK: - Equatable
|
||||||
@@ -50,7 +52,7 @@ extension AmiiboServiceError: LocalizedError {
|
|||||||
case .notAvailable: "The backend service is currently unreachable due to a network or server issue."
|
case .notAvailable: "The backend service is currently unreachable due to a network or server issue."
|
||||||
case .notFound: "No results were found matching the given filter criteria."
|
case .notFound: "No results were found matching the given filter criteria."
|
||||||
case .undocumented(let statusCode): "The server returned an undocumented HTTP status code: \(statusCode)."
|
case .undocumented(let statusCode): "The server returned an undocumented HTTP status code: \(statusCode)."
|
||||||
case .unknown: "An unexpected error occurred."
|
case .unknown(let description): "An unexpected error occurred: \(description)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,55 +12,57 @@
|
|||||||
//
|
//
|
||||||
// ===----------------------------------------------------------------------===
|
// ===----------------------------------------------------------------------===
|
||||||
|
|
||||||
/// A type that contains values to fine-tune a response when requesting amiibo items.
|
/// A filter for amiibo requests.
|
||||||
public struct AmiiboFilter: Sendable {
|
///
|
||||||
|
/// Values left as `nil` do not restrict the result.
|
||||||
|
public struct AmiiboFilter: Sendable, Hashable {
|
||||||
|
|
||||||
// MARK: Properties
|
// MARK: Properties
|
||||||
|
|
||||||
/// A game character to filter the result, if any.
|
/// A game character key or name to match, if any.
|
||||||
public let gameCharacter: String?
|
public let gameCharacter: String?
|
||||||
|
|
||||||
/// A game series to filter the result, if any.
|
/// A game series key or name to match, if any.
|
||||||
public let gameSeries: String?
|
public let gameSeries: String?
|
||||||
|
|
||||||
/// A first part of an identifier to filter the result, if any.
|
/// The first 8 hexadecimal characters of an identifier to match, if any. Shorter values match as a prefix.
|
||||||
public let head: String?
|
public let head: String?
|
||||||
|
|
||||||
/// An amiibo identifier to filter the result, if any.
|
/// A full 16-character hexadecimal identifier to match, if any.
|
||||||
public let identifier: String?
|
public let identifier: String?
|
||||||
|
|
||||||
/// An amiibo name to filter the result, if any.
|
/// An amiibo name, or part of one, to match, if any.
|
||||||
public let name: String?
|
public let name: String?
|
||||||
|
|
||||||
/// An amiibo series to filter the result, if any.
|
/// An amiibo series key or name to match, if any.
|
||||||
public let series: String?
|
public let series: String?
|
||||||
|
|
||||||
/// A flag indicating whether to include games in the response, if any.
|
/// Whether to include related games in ``Amiibo/platform``. `nil` means `false`.
|
||||||
public let showGames: Bool?
|
public let showGames: Bool?
|
||||||
|
|
||||||
/// A flag indicating whether to include amiibo usages in games in the response, if any.
|
/// Whether to include related games and their usages in ``Amiibo/platform``. `nil` means `false`.
|
||||||
public let showUsage: Bool?
|
public let showUsage: Bool?
|
||||||
|
|
||||||
/// A last part of an identifier to filter the result, if any.
|
/// The last 8 hexadecimal characters of an identifier to match, if any. Shorter values match as a prefix.
|
||||||
public let tail: String?
|
public let tail: String?
|
||||||
|
|
||||||
/// An amiibo type to filter the result, if any.
|
/// An amiibo type key or name to match, if any.
|
||||||
public let type: String?
|
public let type: String?
|
||||||
|
|
||||||
// MARK: Initializers
|
// MARK: Initializers
|
||||||
|
|
||||||
/// Initializes this filter.
|
/// Initializes this filter.
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - head: A first part of an identifier to filter the result, if any.
|
/// - head: The first 8 hexadecimal characters of an identifier to match, if any. Shorter values match as a prefix.
|
||||||
/// - tail: A last part of an identifier to filter the result, if any.
|
/// - tail: The last 8 hexadecimal characters of an identifier to match, if any. Shorter values match as a prefix.
|
||||||
/// - identifier: An amiibo identifier to filter the result, if any.
|
/// - identifier: A full 16-character hexadecimal identifier to match, if any.
|
||||||
/// - name: An amiibo name to filter the result, if any.
|
/// - name: An amiibo name, or part of one, to match, if any.
|
||||||
/// - type: An amiibo type to filter the result, if any.
|
/// - type: An amiibo type key or name to match, if any.
|
||||||
/// - series: An amiibo series to filter the result, if any.
|
/// - series: An amiibo series key or name to match, if any.
|
||||||
/// - gameCharacter: A game character to filter the result, if any.
|
/// - gameCharacter: A game character key or name to match, if any.
|
||||||
/// - gameSeries: A game series to filter the result, if any.
|
/// - gameSeries: A game series key or name to match, if any.
|
||||||
/// - showGames: A flag indicating whether to include games in the response, if any.
|
/// - showGames: Whether to include related games in ``Amiibo/platform``. `nil` means `false`.
|
||||||
/// - showUsage: A flag indicating whether to include amiibo usages in games in the response, if any.
|
/// - showUsage: Whether to include related games and their usages in ``Amiibo/platform``. `nil` means `false`.
|
||||||
public init(
|
public init(
|
||||||
head: String? = nil,
|
head: String? = nil,
|
||||||
tail: String? = nil,
|
tail: String? = nil,
|
||||||
|
|||||||
@@ -12,36 +12,36 @@
|
|||||||
//
|
//
|
||||||
// ===----------------------------------------------------------------------===
|
// ===----------------------------------------------------------------------===
|
||||||
|
|
||||||
/// A type that contains values to fine-tune a response when requesting amiibo series.
|
/// A filter for amiibo series requests.
|
||||||
public struct AmiiboSeriesFilter: KeyNameFilter, Sendable {
|
public struct AmiiboSeriesFilter: KeyNameFilter, Sendable {
|
||||||
|
|
||||||
// TODO: Remove the documentation from the properties and initializers of this type as the `--enable-inherited-docs` flag when generating DocC documentation is not working as intended (?).
|
// TODO: Remove the documentation from the properties and initializers of this type as the `--enable-inherited-docs` flag when generating DocC documentation is not working as intended (?).
|
||||||
|
|
||||||
// MARK: Properties
|
// MARK: Properties
|
||||||
|
|
||||||
/// A key to return, if any.
|
/// A hexadecimal key in `0x` format, such as `0x01`, to match exactly, if any.
|
||||||
public let key: String?
|
public let key: String?
|
||||||
|
|
||||||
/// A name to return, if any.
|
/// A name, or part of one, to match, if any.
|
||||||
public let name: String?
|
public let name: String?
|
||||||
|
|
||||||
// MARK: Initializers
|
// MARK: Initializers
|
||||||
|
|
||||||
/// Initializes this filter without key or name values.
|
/// Initializes a filter that matches every amiibo series.
|
||||||
public init() {
|
public init() {
|
||||||
self.key = nil
|
self.key = nil
|
||||||
self.name = nil
|
self.name = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Initializes this filter with a key value.
|
/// Initializes a filter that matches the amiibo series with a given key.
|
||||||
/// - Parameter key: A key to return.
|
/// - Parameter key: A hexadecimal key in `0x` format, such as `0x01`.
|
||||||
public init(key: String) {
|
public init(key: String) {
|
||||||
self.key = key
|
self.key = key
|
||||||
self.name = nil
|
self.name = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Initializes this filter with a name value.
|
/// Initializes a filter that matches amiibo series by name.
|
||||||
/// - Parameter name: A name to return.
|
/// - Parameter name: A name, or part of one.
|
||||||
public init(name: String) {
|
public init(name: String) {
|
||||||
self.key = nil
|
self.key = nil
|
||||||
self.name = name
|
self.name = name
|
||||||
|
|||||||
@@ -12,36 +12,36 @@
|
|||||||
//
|
//
|
||||||
// ===----------------------------------------------------------------------===
|
// ===----------------------------------------------------------------------===
|
||||||
|
|
||||||
/// A type that contains values to fine-tune a response when requesting amiibo types.
|
/// A filter for amiibo type requests.
|
||||||
public struct AmiiboTypeFilter: KeyNameFilter, Sendable {
|
public struct AmiiboTypeFilter: KeyNameFilter, Sendable {
|
||||||
|
|
||||||
// TODO: Remove the documentation from the properties and initializers of this type as the `--enable-inherited-docs` flag when generating DocC documentation is not working as intended (?).
|
// TODO: Remove the documentation from the properties and initializers of this type as the `--enable-inherited-docs` flag when generating DocC documentation is not working as intended (?).
|
||||||
|
|
||||||
// MARK: Properties
|
// MARK: Properties
|
||||||
|
|
||||||
/// A key to return, if any.
|
/// A hexadecimal key in `0x` format, such as `0x01`, to match exactly, if any.
|
||||||
public let key: String?
|
public let key: String?
|
||||||
|
|
||||||
/// A name to return, if any.
|
/// A name, or part of one, to match, if any.
|
||||||
public let name: String?
|
public let name: String?
|
||||||
|
|
||||||
// MARK: Initializers
|
// MARK: Initializers
|
||||||
|
|
||||||
/// Initializes this filter without key or name values.
|
/// Initializes a filter that matches every amiibo type.
|
||||||
public init() {
|
public init() {
|
||||||
self.key = nil
|
self.key = nil
|
||||||
self.name = nil
|
self.name = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Initializes this filter with a key value.
|
/// Initializes a filter that matches the amiibo type with a given key.
|
||||||
/// - Parameter key: A key to return.
|
/// - Parameter key: A hexadecimal key in `0x` format, such as `0x01`.
|
||||||
public init(key: String) {
|
public init(key: String) {
|
||||||
self.key = key
|
self.key = key
|
||||||
self.name = nil
|
self.name = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Initializes this filter with a name value.
|
/// Initializes a filter that matches amiibo types by name.
|
||||||
/// - Parameter name: A name to return.
|
/// - Parameter name: A name, or part of one.
|
||||||
public init(name: String) {
|
public init(name: String) {
|
||||||
self.key = nil
|
self.key = nil
|
||||||
self.name = name
|
self.name = name
|
||||||
|
|||||||
@@ -12,36 +12,36 @@
|
|||||||
//
|
//
|
||||||
// ===----------------------------------------------------------------------===
|
// ===----------------------------------------------------------------------===
|
||||||
|
|
||||||
/// A type that contains values to fine-tune a response when requesting game characters.
|
/// A filter for game character requests.
|
||||||
public struct GameCharacterFilter: KeyNameFilter, Sendable {
|
public struct GameCharacterFilter: KeyNameFilter, Sendable {
|
||||||
|
|
||||||
// TODO: Remove the documentation from the properties and initializers of this type as the `--enable-inherited-docs` flag when generating DocC documentation is not working as intended (?).
|
// TODO: Remove the documentation from the properties and initializers of this type as the `--enable-inherited-docs` flag when generating DocC documentation is not working as intended (?).
|
||||||
|
|
||||||
// MARK: Properties
|
// MARK: Properties
|
||||||
|
|
||||||
/// A key to return, if any.
|
/// A hexadecimal key in `0x` format, such as `0x0001`, to match exactly, if any.
|
||||||
public let key: String?
|
public let key: String?
|
||||||
|
|
||||||
/// A name to return, if any.
|
/// A name, or part of one, to match, if any.
|
||||||
public let name: String?
|
public let name: String?
|
||||||
|
|
||||||
// MARK: Initializers
|
// MARK: Initializers
|
||||||
|
|
||||||
/// Initializes this filter without key or name values.
|
/// Initializes a filter that matches every game character.
|
||||||
public init() {
|
public init() {
|
||||||
self.key = nil
|
self.key = nil
|
||||||
self.name = nil
|
self.name = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Initializes this filter with a key value.
|
/// Initializes a filter that matches the game character with a given key.
|
||||||
/// - Parameter key: A key to return.
|
/// - Parameter key: A hexadecimal key in `0x` format, such as `0x0001`.
|
||||||
public init(key: String) {
|
public init(key: String) {
|
||||||
self.key = key
|
self.key = key
|
||||||
self.name = nil
|
self.name = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Initializes this filter with a name value.
|
/// Initializes a filter that matches game characters by name.
|
||||||
/// - Parameter name: A name to return.
|
/// - Parameter name: A name, or part of one.
|
||||||
public init(name: String) {
|
public init(name: String) {
|
||||||
self.key = nil
|
self.key = nil
|
||||||
self.name = name
|
self.name = name
|
||||||
|
|||||||
@@ -12,36 +12,36 @@
|
|||||||
//
|
//
|
||||||
// ===----------------------------------------------------------------------===
|
// ===----------------------------------------------------------------------===
|
||||||
|
|
||||||
/// A type that contains values to fine-tune a response when requesting game series.
|
/// A filter for game series requests.
|
||||||
public struct GameSeriesFilter: KeyNameFilter, Sendable {
|
public struct GameSeriesFilter: KeyNameFilter, Sendable {
|
||||||
|
|
||||||
// TODO: Remove the documentation from the properties and initializers of this type as the `--enable-inherited-docs` flag when generating DocC documentation is not working as intended (?).
|
// TODO: Remove the documentation from the properties and initializers of this type as the `--enable-inherited-docs` flag when generating DocC documentation is not working as intended (?).
|
||||||
|
|
||||||
// MARK: Properties
|
// MARK: Properties
|
||||||
|
|
||||||
/// A key to return, if any.
|
/// A hexadecimal key in `0x` format, such as `0x001`, to match exactly, if any.
|
||||||
public let key: String?
|
public let key: String?
|
||||||
|
|
||||||
/// A name to return, if any.
|
/// A name, or part of one, to match, if any.
|
||||||
public let name: String?
|
public let name: String?
|
||||||
|
|
||||||
// MARK: Initializers
|
// MARK: Initializers
|
||||||
|
|
||||||
/// Initializes this filter without key or name values.
|
/// Initializes a filter that matches every game series.
|
||||||
public init() {
|
public init() {
|
||||||
self.key = nil
|
self.key = nil
|
||||||
self.name = nil
|
self.name = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Initializes this filter with a key value.
|
/// Initializes a filter that matches the game series with a given key.
|
||||||
/// - Parameter key: A key to return.
|
/// - Parameter key: A hexadecimal key in `0x` format, such as `0x001`.
|
||||||
public init(key: String) {
|
public init(key: String) {
|
||||||
self.key = key
|
self.key = key
|
||||||
self.name = nil
|
self.name = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Initializes this filter with a name value.
|
/// Initializes a filter that matches game series by name.
|
||||||
/// - Parameter name: A name to return.
|
/// - Parameter name: A name, or part of one.
|
||||||
public init(name: String) {
|
public init(name: String) {
|
||||||
self.key = nil
|
self.key = nil
|
||||||
self.name = name
|
self.name = name
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
/// A model that represents an amiibo.
|
/// A model that represents an amiibo.
|
||||||
public struct Amiibo: Sendable, Hashable {
|
public struct Amiibo: Sendable, Hashable, Codable, Identifiable {
|
||||||
|
|
||||||
// MARK: Properties
|
// MARK: Properties
|
||||||
|
|
||||||
@@ -34,7 +34,9 @@ public struct Amiibo: Sendable, Hashable {
|
|||||||
/// The name of this amiibo.
|
/// The name of this amiibo.
|
||||||
public let name: String
|
public let name: String
|
||||||
|
|
||||||
/// The game platform data for this amiibo, if available.
|
/// The related games of this amiibo, grouped by platform.
|
||||||
|
///
|
||||||
|
/// `nil` unless the request sets ``AmiiboFilter/showGames`` or ``AmiiboFilter/showUsage``, or when there are no related games.
|
||||||
public let platform: Platform?
|
public let platform: Platform?
|
||||||
|
|
||||||
/// The release dates of this amiibo across different regions.
|
/// The release dates of this amiibo across different regions.
|
||||||
@@ -50,7 +52,32 @@ public struct Amiibo: Sendable, Hashable {
|
|||||||
public let type: String
|
public let type: String
|
||||||
|
|
||||||
// MARK: Initializers
|
// MARK: Initializers
|
||||||
|
|
||||||
|
/// Initializes this model.
|
||||||
|
package init(
|
||||||
|
head: String,
|
||||||
|
tail: String,
|
||||||
|
name: String,
|
||||||
|
type: String,
|
||||||
|
series: String,
|
||||||
|
gameCharacter: String,
|
||||||
|
gameSeries: String,
|
||||||
|
image: String,
|
||||||
|
release: Release = .init(),
|
||||||
|
platform: Platform? = nil
|
||||||
|
) {
|
||||||
|
self.gameCharacter = gameCharacter
|
||||||
|
self.gameSeries = gameSeries
|
||||||
|
self.head = head
|
||||||
|
self.image = image
|
||||||
|
self.name = name
|
||||||
|
self.platform = platform
|
||||||
|
self.release = release
|
||||||
|
self.series = series
|
||||||
|
self.tail = tail
|
||||||
|
self.type = type
|
||||||
|
}
|
||||||
|
|
||||||
/// Initializes this model from a given payload.
|
/// Initializes this model from a given payload.
|
||||||
/// - Parameter payload: A payload that contains the values for the model.
|
/// - Parameter payload: A payload that contains the values for the model.
|
||||||
init(_ payload: Components.Schemas.Amiibo) {
|
init(_ payload: Components.Schemas.Amiibo) {
|
||||||
@@ -72,7 +99,12 @@ public struct Amiibo: Sendable, Hashable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// MARK: Computed
|
// MARK: Computed
|
||||||
|
|
||||||
|
/// The ``identifier`` of this amiibo.
|
||||||
|
public var id: String {
|
||||||
|
identifier
|
||||||
|
}
|
||||||
|
|
||||||
/// The full 16-character hexadecimal identifier, composed of the ``head`` and ``tail``.
|
/// The full 16-character hexadecimal identifier, composed of the ``head`` and ``tail``.
|
||||||
public var identifier: String {
|
public var identifier: String {
|
||||||
head + tail
|
head + tail
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
extension Amiibo {
|
extension Amiibo {
|
||||||
/// A model that represents a game related to an amiibo.
|
/// A model that represents a game related to an amiibo.
|
||||||
public struct Game: Sendable, Hashable {
|
public struct Game: Sendable, Hashable, Codable {
|
||||||
|
|
||||||
// MARK: Properties
|
// MARK: Properties
|
||||||
|
|
||||||
@@ -24,11 +24,22 @@ extension Amiibo {
|
|||||||
/// The name of this game.
|
/// The name of this game.
|
||||||
public let name: String
|
public let name: String
|
||||||
|
|
||||||
/// A list of amiibo usages within this game, if available.
|
/// A list of amiibo usages within this game, or `nil` unless the request sets ``AmiiboFilter/showUsage``.
|
||||||
public let usages: [Usage]?
|
public let usages: [Usage]?
|
||||||
|
|
||||||
// MARK: Initializers
|
// MARK: Initializers
|
||||||
|
|
||||||
|
/// Initializes this model.
|
||||||
|
package init(
|
||||||
|
identifiers: [String],
|
||||||
|
name: String,
|
||||||
|
usages: [Usage]? = nil
|
||||||
|
) {
|
||||||
|
self.identifiers = identifiers
|
||||||
|
self.name = name
|
||||||
|
self.usages = usages
|
||||||
|
}
|
||||||
|
|
||||||
/// Initializes this model from a given payload.
|
/// Initializes this model from a given payload.
|
||||||
/// - Parameter payload: A payload that contains the values for the model.
|
/// - Parameter payload: A payload that contains the values for the model.
|
||||||
init(_ payload: Components.Schemas.AmiiboGame) {
|
init(_ payload: Components.Schemas.AmiiboGame) {
|
||||||
|
|||||||
@@ -13,8 +13,8 @@
|
|||||||
// ===----------------------------------------------------------------------===
|
// ===----------------------------------------------------------------------===
|
||||||
|
|
||||||
extension Amiibo {
|
extension Amiibo {
|
||||||
/// A model that represents a collection of `Switch`, `Switch 2`, `3DS`, and `Wii U` games related to an amiibo.
|
/// A model that groups the games related to an amiibo by platform.
|
||||||
public struct Platform: Sendable, Hashable {
|
public struct Platform: Sendable, Hashable, Codable {
|
||||||
|
|
||||||
// MARK: Properties
|
// MARK: Properties
|
||||||
|
|
||||||
@@ -31,8 +31,21 @@ extension Amiibo {
|
|||||||
public let wiiU: [Game]
|
public let wiiU: [Game]
|
||||||
|
|
||||||
// MARK: Initializers
|
// MARK: Initializers
|
||||||
|
|
||||||
/// Initializes this model.
|
/// Initializes this model.
|
||||||
|
package init(
|
||||||
|
`switch`: [Game] = [],
|
||||||
|
switch2: [Game] = [],
|
||||||
|
threeDS: [Game] = [],
|
||||||
|
wiiU: [Game] = []
|
||||||
|
) {
|
||||||
|
self.switch = `switch`
|
||||||
|
self.switch2 = switch2
|
||||||
|
self.threeDS = threeDS
|
||||||
|
self.wiiU = wiiU
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Initializes this model from the given payloads.
|
||||||
///
|
///
|
||||||
/// > important: In case no data is provided, then an instance of this model is not created.
|
/// > important: In case no data is provided, then an instance of this model is not created.
|
||||||
///
|
///
|
||||||
@@ -47,30 +60,18 @@ extension Amiibo {
|
|||||||
_ threeDS: [Components.Schemas.AmiiboGame]?,
|
_ threeDS: [Components.Schemas.AmiiboGame]?,
|
||||||
_ wiiU: [Components.Schemas.AmiiboGame]?
|
_ wiiU: [Components.Schemas.AmiiboGame]?
|
||||||
) {
|
) {
|
||||||
guard (`switch` != nil && `switch`?.isEmpty == false)
|
guard `switch`?.isEmpty == false
|
||||||
|| (switch2 != nil && switch2?.isEmpty == false)
|
|| switch2?.isEmpty == false
|
||||||
|| (threeDS != nil && threeDS?.isEmpty == false)
|
|| threeDS?.isEmpty == false
|
||||||
|| (wiiU != nil && wiiU?.isEmpty == false)
|
|| wiiU?.isEmpty == false
|
||||||
else {
|
else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
self.switch = {
|
self.switch = `switch`?.map { .init($0) } ?? []
|
||||||
guard let `switch` else { return [] }
|
self.switch2 = switch2?.map { .init($0) } ?? []
|
||||||
return `switch`.map { .init($0) }
|
self.threeDS = threeDS?.map { .init($0) } ?? []
|
||||||
}()
|
self.wiiU = wiiU?.map { .init($0) } ?? []
|
||||||
self.switch2 = {
|
|
||||||
guard let switch2 else { return [] }
|
|
||||||
return switch2.map { .init($0) }
|
|
||||||
}()
|
|
||||||
self.threeDS = {
|
|
||||||
guard let threeDS else { return [] }
|
|
||||||
return threeDS.map { .init($0) }
|
|
||||||
}()
|
|
||||||
self.wiiU = {
|
|
||||||
guard let wiiU else { return [] }
|
|
||||||
return wiiU.map { .init($0) }
|
|
||||||
}()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,9 @@ import Foundation
|
|||||||
|
|
||||||
extension Amiibo {
|
extension Amiibo {
|
||||||
/// A model that represents the regional release dates of an amiibo.
|
/// A model that represents the regional release dates of an amiibo.
|
||||||
public struct Release: Sendable, Hashable {
|
///
|
||||||
|
/// The service provides these dates as date-only values, which are decoded as midnight UTC.
|
||||||
|
public struct Release: Sendable, Hashable, Codable {
|
||||||
|
|
||||||
// MARK: Properties
|
// MARK: Properties
|
||||||
|
|
||||||
@@ -34,6 +36,19 @@ extension Amiibo {
|
|||||||
|
|
||||||
// MARK: Initializers
|
// MARK: Initializers
|
||||||
|
|
||||||
|
/// Initializes this model.
|
||||||
|
package init(
|
||||||
|
america: Date? = nil,
|
||||||
|
australia: Date? = nil,
|
||||||
|
europe: Date? = nil,
|
||||||
|
japan: Date? = nil
|
||||||
|
) {
|
||||||
|
self.america = america
|
||||||
|
self.australia = australia
|
||||||
|
self.europe = europe
|
||||||
|
self.japan = japan
|
||||||
|
}
|
||||||
|
|
||||||
/// Initializes this model from a given payload.
|
/// Initializes this model from a given payload.
|
||||||
/// - Parameter payload: A payload that contains the values for the model.
|
/// - Parameter payload: A payload that contains the values for the model.
|
||||||
init(_ payload: Components.Schemas.AmiiboRelease) {
|
init(_ payload: Components.Schemas.AmiiboRelease) {
|
||||||
|
|||||||
@@ -14,18 +14,24 @@
|
|||||||
|
|
||||||
extension Amiibo {
|
extension Amiibo {
|
||||||
/// A model that represents the usage of an amiibo within a certain game.
|
/// A model that represents the usage of an amiibo within a certain game.
|
||||||
public struct Usage: Sendable, Hashable {
|
public struct Usage: Sendable, Hashable, Codable {
|
||||||
|
|
||||||
// MARK: Properties
|
// MARK: Properties
|
||||||
|
|
||||||
/// A description of how the amiibo is used within the game.
|
/// A description of how the amiibo is used within the game.
|
||||||
public let explanation: String
|
public let explanation: String
|
||||||
|
|
||||||
/// A flag that indicates whether the amiibo can save game data.
|
/// Whether the amiibo can save game data.
|
||||||
public let isWriteable: Bool
|
public let isWriteable: Bool
|
||||||
|
|
||||||
// MARK: Initializers
|
// MARK: Initializers
|
||||||
|
|
||||||
|
/// Initializes this model.
|
||||||
|
package init(explanation: String, isWriteable: Bool) {
|
||||||
|
self.explanation = explanation
|
||||||
|
self.isWriteable = isWriteable
|
||||||
|
}
|
||||||
|
|
||||||
/// Initializes this model from a given payload.
|
/// Initializes this model from a given payload.
|
||||||
/// - Parameter payload: A payload that contains the values for the model.
|
/// - Parameter payload: A payload that contains the values for the model.
|
||||||
init(_ payload: Components.Schemas.AmiiboUsage) {
|
init(_ payload: Components.Schemas.AmiiboUsage) {
|
||||||
|
|||||||
@@ -24,12 +24,25 @@ public struct AmiiboSeries: KeyNameModel {
|
|||||||
public let name: String
|
public let name: String
|
||||||
|
|
||||||
// MARK: Initializers
|
// MARK: Initializers
|
||||||
|
|
||||||
|
/// Initializes this model.
|
||||||
|
package init(key: String, name: String) {
|
||||||
|
self.key = key
|
||||||
|
self.name = name
|
||||||
|
}
|
||||||
|
|
||||||
/// Initializes this model from a given payload.
|
/// Initializes this model from a given payload.
|
||||||
/// - Parameter payload: A payload that contains the values for the model.
|
/// - Parameter payload: A payload that contains the values for the model.
|
||||||
init(_ payload: Components.Schemas.Tuple) {
|
init(_ payload: some KeyNamePayload) {
|
||||||
self.key = payload.key
|
self.key = payload.key
|
||||||
self.name = payload.name
|
self.name = payload.name
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: Computed
|
||||||
|
|
||||||
|
/// The ``key`` of this amiibo series.
|
||||||
|
public var id: String {
|
||||||
|
key
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -24,12 +24,25 @@ public struct AmiiboType: KeyNameModel {
|
|||||||
public let name: String
|
public let name: String
|
||||||
|
|
||||||
// MARK: Initializers
|
// MARK: Initializers
|
||||||
|
|
||||||
|
/// Initializes this model.
|
||||||
|
package init(key: String, name: String) {
|
||||||
|
self.key = key
|
||||||
|
self.name = name
|
||||||
|
}
|
||||||
|
|
||||||
/// Initializes this model from a given payload.
|
/// Initializes this model from a given payload.
|
||||||
/// - Parameter payload: A payload that contains the values for the model.
|
/// - Parameter payload: A payload that contains the values for the model.
|
||||||
init(_ payload: Components.Schemas.Tuple) {
|
init(_ payload: some KeyNamePayload) {
|
||||||
self.key = payload.key
|
self.key = payload.key
|
||||||
self.name = payload.name
|
self.name = payload.name
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: Computed
|
||||||
|
|
||||||
|
/// The ``key`` of this amiibo type.
|
||||||
|
public var id: String {
|
||||||
|
key
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -25,11 +25,24 @@ public struct GameCharacter: KeyNameModel {
|
|||||||
|
|
||||||
// MARK: Initializers
|
// MARK: Initializers
|
||||||
|
|
||||||
|
/// Initializes this model.
|
||||||
|
package init(key: String, name: String) {
|
||||||
|
self.key = key
|
||||||
|
self.name = name
|
||||||
|
}
|
||||||
|
|
||||||
/// Initializes this model from a given payload.
|
/// Initializes this model from a given payload.
|
||||||
/// - Parameter payload: A payload that contains the values for the model.
|
/// - Parameter payload: A payload that contains the values for the model.
|
||||||
init(_ payload: Components.Schemas.Tuple) {
|
init(_ payload: some KeyNamePayload) {
|
||||||
self.key = payload.key
|
self.key = payload.key
|
||||||
self.name = payload.name
|
self.name = payload.name
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: Computed
|
||||||
|
|
||||||
|
/// The ``key`` of this game character.
|
||||||
|
public var id: String {
|
||||||
|
key
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -24,12 +24,25 @@ public struct GameSeries: KeyNameModel {
|
|||||||
public let name: String
|
public let name: String
|
||||||
|
|
||||||
// MARK: Initializers
|
// MARK: Initializers
|
||||||
|
|
||||||
|
/// Initializes this model.
|
||||||
|
package init(key: String, name: String) {
|
||||||
|
self.key = key
|
||||||
|
self.name = name
|
||||||
|
}
|
||||||
|
|
||||||
/// Initializes this model from a given payload.
|
/// Initializes this model from a given payload.
|
||||||
/// - Parameter payload: A payload that contains the values for the model.
|
/// - Parameter payload: A payload that contains the values for the model.
|
||||||
init(_ payload: Components.Schemas.Tuple) {
|
init(_ payload: some KeyNamePayload) {
|
||||||
self.key = payload.key
|
self.key = payload.key
|
||||||
self.name = payload.name
|
self.name = payload.name
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: Computed
|
||||||
|
|
||||||
|
/// The ``key`` of this game series.
|
||||||
|
public var id: String {
|
||||||
|
key
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -14,81 +14,46 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
/// A protocol that defines API clients containing all available endpoints to interact with.
|
/// A protocol that defines a client that fetches data from the Amiibo API.
|
||||||
public protocol AmiiboClient {
|
///
|
||||||
|
/// ``AmiiboLiveClient`` is the default implementation; conform to provide another, such as a mock. Conforming types must be `Sendable`.
|
||||||
|
public protocol AmiiboClient: Sendable {
|
||||||
|
|
||||||
// MARK: Functions
|
// MARK: Functions
|
||||||
|
|
||||||
#if swift(>=6.0)
|
|
||||||
/// Gets a list of amiibo items based on a given filter.
|
/// Gets a list of amiibo items based on a given filter.
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
/// - Parameter filter: A filter for the result.
|
||||||
/// - Returns: A list of filtered amiibo items.
|
/// - Returns: A list of filtered amiibo items.
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
/// - Throws: An ``AmiiboServiceError`` if the call fails.
|
||||||
func getAmiibos(by filter: AmiiboFilter) async throws(AmiiboServiceError) -> [Amiibo]
|
func getAmiibos(by filter: AmiiboFilter) async throws(AmiiboServiceError) -> [Amiibo]
|
||||||
|
|
||||||
/// Gets a list of amiibo series based on a given filter.
|
/// Gets a list of amiibo series based on a given filter.
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
/// - Parameter filter: A filter for the result.
|
||||||
/// - Returns: A list of filtered amiibo series.
|
/// - Returns: A list of filtered amiibo series.
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
/// - Throws: An ``AmiiboServiceError`` if the call fails.
|
||||||
func getAmiiboSeries(by filter: AmiiboSeriesFilter) async throws(AmiiboServiceError) -> [AmiiboSeries]
|
func getAmiiboSeries(by filter: AmiiboSeriesFilter) async throws(AmiiboServiceError) -> [AmiiboSeries]
|
||||||
|
|
||||||
/// Gets a list of amiibo types based on a given filter.
|
/// Gets a list of amiibo types based on a given filter.
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
/// - Parameter filter: A filter for the result.
|
||||||
/// - Returns: A list of filtered amiibo types.
|
/// - Returns: A list of filtered amiibo types.
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
/// - Throws: An ``AmiiboServiceError`` if the call fails.
|
||||||
func getAmiiboTypes(by filter: AmiiboTypeFilter) async throws(AmiiboServiceError) -> [AmiiboType]
|
func getAmiiboTypes(by filter: AmiiboTypeFilter) async throws(AmiiboServiceError) -> [AmiiboType]
|
||||||
|
|
||||||
/// Gets a list of game characters based on a given filter.
|
/// Gets a list of game characters based on a given filter.
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
/// - Parameter filter: A filter for the result.
|
||||||
/// - Returns: A list of filtered game characters.
|
/// - Returns: A list of filtered game characters.
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
/// - Throws: An ``AmiiboServiceError`` if the call fails.
|
||||||
func getGameCharacters(by filter: GameCharacterFilter) async throws(AmiiboServiceError) -> [GameCharacter]
|
func getGameCharacters(by filter: GameCharacterFilter) async throws(AmiiboServiceError) -> [GameCharacter]
|
||||||
|
|
||||||
/// Gets a list of game series based on a given filter.
|
/// Gets a list of game series based on a given filter.
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
/// - Parameter filter: A filter for the result.
|
||||||
/// - Returns: A list of filtered game series.
|
/// - Returns: A list of filtered game series.
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
/// - Throws: An ``AmiiboServiceError`` if the call fails.
|
||||||
func getGameSeries(by filter: GameSeriesFilter) async throws(AmiiboServiceError) -> [GameSeries]
|
func getGameSeries(by filter: GameSeriesFilter) async throws(AmiiboServiceError) -> [GameSeries]
|
||||||
|
|
||||||
/// Gets the date when the data was last updated.
|
/// Gets the date when the data was last updated.
|
||||||
/// - Returns: A last updated date.
|
/// - Returns: A last updated date, decoded as UTC.
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
/// - Throws: An ``AmiiboServiceError`` if the call fails.
|
||||||
func getLastUpdated() async throws(AmiiboServiceError) -> Date
|
func getLastUpdated() async throws(AmiiboServiceError) -> Date
|
||||||
#else
|
|
||||||
/// Gets a list of amiibo items based on a given filter.
|
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
|
||||||
/// - Returns: A list of filtered amiibo items.
|
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
|
||||||
func getAmiibos(by filter: AmiiboFilter) async throws -> [Amiibo]
|
|
||||||
|
|
||||||
/// Gets a list of amiibo series based on a given filter.
|
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
|
||||||
/// - Returns: A list of filtered amiibo series.
|
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
|
||||||
func getAmiiboSeries(by filter: AmiiboSeriesFilter) async throws -> [AmiiboSeries]
|
|
||||||
|
|
||||||
/// Gets a list of amiibo types based on a given filter.
|
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
|
||||||
/// - Returns: A list of filtered amiibo types.
|
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
|
||||||
func getAmiiboTypes(by filter: AmiiboTypeFilter) async throws -> [AmiiboType]
|
|
||||||
|
|
||||||
/// Gets a list of game characters based on a given filter.
|
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
|
||||||
/// - Returns: A list of filtered game characters.
|
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
|
||||||
func getGameCharacters(by filter: GameCharacterFilter) async throws -> [GameCharacter]
|
|
||||||
|
|
||||||
/// Gets a list of game series based on a given filter.
|
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
|
||||||
/// - Returns: A list of filtered game series.
|
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
|
||||||
func getGameSeries(by filter: GameSeriesFilter) async throws -> [GameSeries]
|
|
||||||
|
|
||||||
/// Gets the date when the data was last updated.
|
|
||||||
/// - Returns: A last updated date.
|
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
|
||||||
func getLastUpdated() async throws -> Date
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -14,29 +14,30 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
/// A type that implements the service that uses a client to make calls.
|
/// The entry point for fetching data from the Amiibo API.
|
||||||
public struct AmiiboService {
|
///
|
||||||
|
/// It forwards every call to the ``AmiiboClient`` given at initialization, which defaults to ``AmiiboLiveClient``. Instances are `Sendable`.
|
||||||
|
public struct AmiiboService: Sendable {
|
||||||
|
|
||||||
// MARK: Properties
|
// MARK: Properties
|
||||||
|
|
||||||
/// A client to interact with the endpoints.
|
/// A client to interact with the endpoints.
|
||||||
private let client: any AmiiboClient
|
private let client: any AmiiboClient
|
||||||
|
|
||||||
// MARK: Initializers
|
// MARK: Initializers
|
||||||
|
|
||||||
/// Initializes this service with a specific client type.
|
/// Initializes this service with a client.
|
||||||
/// - Parameter client: A client to use to interact with the endpoints.
|
/// - Parameter client: The client that performs the calls. Defaults to ``AmiiboLiveClient``.
|
||||||
public init(client: some AmiiboClient = AmiiboLiveClient()) {
|
public init(client: some AmiiboClient = AmiiboLiveClient()) {
|
||||||
self.client = client
|
self.client = client
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: Functions
|
// MARK: Functions
|
||||||
|
|
||||||
#if swift(>=6.0)
|
|
||||||
/// Gets a list of amiibo items based on a given filter.
|
/// Gets a list of amiibo items based on a given filter.
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
/// - Parameter filter: A filter for the result.
|
||||||
/// - Returns: A list of filtered amiibo items.
|
/// - Returns: A list of filtered amiibo items.
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
/// - Throws: An ``AmiiboServiceError`` if the call fails.
|
||||||
public func getAmiibos(
|
public func getAmiibos(
|
||||||
_ filter: AmiiboFilter = .init()
|
_ filter: AmiiboFilter = .init()
|
||||||
) async throws(AmiiboServiceError) -> [Amiibo] {
|
) async throws(AmiiboServiceError) -> [Amiibo] {
|
||||||
@@ -44,9 +45,9 @@ public struct AmiiboService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Gets a list of amiibo series based on a given filter.
|
/// Gets a list of amiibo series based on a given filter.
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
/// - Parameter filter: A filter for the result.
|
||||||
/// - Returns: A list of filtered amiibo series.
|
/// - Returns: A list of filtered amiibo series.
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
/// - Throws: An ``AmiiboServiceError`` if the call fails.
|
||||||
public func getAmiiboSeries(
|
public func getAmiiboSeries(
|
||||||
_ filter: AmiiboSeriesFilter = .init()
|
_ filter: AmiiboSeriesFilter = .init()
|
||||||
) async throws(AmiiboServiceError) -> [AmiiboSeries] {
|
) async throws(AmiiboServiceError) -> [AmiiboSeries] {
|
||||||
@@ -54,9 +55,9 @@ public struct AmiiboService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Gets a list of amiibo types based on a given filter.
|
/// Gets a list of amiibo types based on a given filter.
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
/// - Parameter filter: A filter for the result.
|
||||||
/// - Returns: A list of filtered amiibo types.
|
/// - Returns: A list of filtered amiibo types.
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
/// - Throws: An ``AmiiboServiceError`` if the call fails.
|
||||||
public func getAmiiboTypes(
|
public func getAmiiboTypes(
|
||||||
_ filter: AmiiboTypeFilter = .init()
|
_ filter: AmiiboTypeFilter = .init()
|
||||||
) async throws(AmiiboServiceError) -> [AmiiboType] {
|
) async throws(AmiiboServiceError) -> [AmiiboType] {
|
||||||
@@ -64,9 +65,9 @@ public struct AmiiboService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Gets a list of game characters based on a given filter.
|
/// Gets a list of game characters based on a given filter.
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
/// - Parameter filter: A filter for the result.
|
||||||
/// - Returns: A list of filtered game characters.
|
/// - Returns: A list of filtered game characters.
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
/// - Throws: An ``AmiiboServiceError`` if the call fails.
|
||||||
public func getGameCharacters(
|
public func getGameCharacters(
|
||||||
_ filter: GameCharacterFilter = .init()
|
_ filter: GameCharacterFilter = .init()
|
||||||
) async throws(AmiiboServiceError) -> [GameCharacter] {
|
) async throws(AmiiboServiceError) -> [GameCharacter] {
|
||||||
@@ -74,9 +75,9 @@ public struct AmiiboService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Gets a list of game series based on a given filter.
|
/// Gets a list of game series based on a given filter.
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
/// - Parameter filter: A filter for the result.
|
||||||
/// - Returns: A list of filtered game series.
|
/// - Returns: A list of filtered game series.
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
/// - Throws: An ``AmiiboServiceError`` if the call fails.
|
||||||
public func getGameSeries(
|
public func getGameSeries(
|
||||||
_ filter: GameSeriesFilter = .init()
|
_ filter: GameSeriesFilter = .init()
|
||||||
) async throws(AmiiboServiceError) -> [GameSeries] {
|
) async throws(AmiiboServiceError) -> [GameSeries] {
|
||||||
@@ -84,68 +85,10 @@ public struct AmiiboService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Gets the date when the data was last updated.
|
/// Gets the date when the data was last updated.
|
||||||
/// - Returns: A last updated date.
|
/// - Returns: A last updated date, decoded as UTC.
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
/// - Throws: An ``AmiiboServiceError`` if the call fails.
|
||||||
public func getLastUpdated() async throws(AmiiboServiceError) -> Date {
|
public func getLastUpdated() async throws(AmiiboServiceError) -> Date {
|
||||||
try await client.getLastUpdated()
|
try await client.getLastUpdated()
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
/// Gets a list of amiibo items based on a given filter.
|
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
|
||||||
/// - Returns: A list of filtered amiibo items.
|
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
|
||||||
public func getAmiibos(
|
|
||||||
_ filter: AmiiboFilter = .init()
|
|
||||||
) async throws -> [Amiibo] {
|
|
||||||
try await client.getAmiibos(by: filter)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Gets a list of amiibo series based on a given filter.
|
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
|
||||||
/// - Returns: A list of filtered amiibo series.
|
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
|
||||||
public func getAmiiboSeries(
|
|
||||||
_ filter: AmiiboSeriesFilter = .init()
|
|
||||||
) async throws -> [AmiiboSeries] {
|
|
||||||
try await client.getAmiiboSeries(by: filter)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Gets a list of amiibo types based on a given filter.
|
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
|
||||||
/// - Returns: A list of filtered amiibo types.
|
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
|
||||||
public func getAmiiboTypes(
|
|
||||||
_ filter: AmiiboTypeFilter = .init()
|
|
||||||
) async throws -> [AmiiboType] {
|
|
||||||
try await client.getAmiiboTypes(by: filter)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Gets a list of game characters based on a given filter.
|
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
|
||||||
/// - Returns: A list of filtered game characters.
|
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
|
||||||
public func getGameCharacters(
|
|
||||||
_ filter: GameCharacterFilter = .init()
|
|
||||||
) async throws -> [GameCharacter] {
|
|
||||||
try await client.getGameCharacters(by: filter)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Gets a list of game series based on a given filter.
|
|
||||||
/// - Parameter filter: A filter to remove unwanted items from the result.
|
|
||||||
/// - Returns: A list of filtered game series.
|
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
|
||||||
public func getGameSeries(
|
|
||||||
_ filter: GameSeriesFilter = .init()
|
|
||||||
) async throws -> [GameSeries] {
|
|
||||||
try await client.getGameSeries(by: filter)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Gets the date when the data was last updated.
|
|
||||||
/// - Returns: A last updated date.
|
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case some issue is encountered while generating the result.
|
|
||||||
public func getLastUpdated() async throws -> Date {
|
|
||||||
try await client.getLastUpdated()
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -35,7 +35,7 @@ info:
|
|||||||
* *You will require your end users to comply with (and not knowingly enable them to violate) applicable law, regulation, and the Terms.*
|
* *You will require your end users to comply with (and not knowingly enable them to violate) applicable law, regulation, and the Terms.*
|
||||||
* *You will comply with all applicable law, regulation, and third party rights (including without limitation laws regarding the import or export of data or software, privacy, and local laws). You will not use the APIs to encourage or promote illegal activity or violation of third party rights.*
|
* *You will comply with all applicable law, regulation, and third party rights (including without limitation laws regarding the import or export of data or software, privacy, and local laws). You will not use the APIs to encourage or promote illegal activity or violation of third party rights.*
|
||||||
* *These Terms and Conditions are subject to change without notice, from time to time in our sole discretion.*
|
* *These Terms and Conditions are subject to change without notice, from time to time in our sole discretion.*
|
||||||
version: v1.0.0
|
version: 1.0.0
|
||||||
termsOfService: https://www.amiiboapi.org/docs/#termscondition
|
termsOfService: https://www.amiiboapi.org/docs/#termscondition
|
||||||
contact:
|
contact:
|
||||||
name: FAQ
|
name: FAQ
|
||||||
@@ -91,7 +91,7 @@ paths:
|
|||||||
'404':
|
'404':
|
||||||
$ref: '#/components/responses/NotFound'
|
$ref: '#/components/responses/NotFound'
|
||||||
'500':
|
'500':
|
||||||
description: The service is currently unavailable.
|
$ref: '#/components/responses/InternalServerError'
|
||||||
/amiiboseries:
|
/amiiboseries:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
@@ -119,7 +119,7 @@ paths:
|
|||||||
'404':
|
'404':
|
||||||
$ref: '#/components/responses/NotFound'
|
$ref: '#/components/responses/NotFound'
|
||||||
'500':
|
'500':
|
||||||
description: The service is currently unavailable.
|
$ref: '#/components/responses/InternalServerError'
|
||||||
/character:
|
/character:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
@@ -147,7 +147,7 @@ paths:
|
|||||||
'404':
|
'404':
|
||||||
$ref: '#/components/responses/NotFound'
|
$ref: '#/components/responses/NotFound'
|
||||||
'500':
|
'500':
|
||||||
description: The service is currently unavailable.
|
$ref: '#/components/responses/InternalServerError'
|
||||||
/gameseries:
|
/gameseries:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
@@ -175,7 +175,7 @@ paths:
|
|||||||
'404':
|
'404':
|
||||||
$ref: '#/components/responses/NotFound'
|
$ref: '#/components/responses/NotFound'
|
||||||
'500':
|
'500':
|
||||||
description: The service is currently unavailable.
|
$ref: '#/components/responses/InternalServerError'
|
||||||
/type:
|
/type:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
@@ -203,7 +203,7 @@ paths:
|
|||||||
'404':
|
'404':
|
||||||
$ref: '#/components/responses/NotFound'
|
$ref: '#/components/responses/NotFound'
|
||||||
'500':
|
'500':
|
||||||
description: The service is currently unavailable.
|
$ref: '#/components/responses/InternalServerError'
|
||||||
/lastupdated:
|
/lastupdated:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
@@ -222,7 +222,7 @@ paths:
|
|||||||
schema:
|
schema:
|
||||||
$ref: '#/components/schemas/LastUpdated'
|
$ref: '#/components/schemas/LastUpdated'
|
||||||
'500':
|
'500':
|
||||||
description: The service is currently unavailable.
|
$ref: '#/components/responses/InternalServerError'
|
||||||
components:
|
components:
|
||||||
parameters:
|
parameters:
|
||||||
AmiiboSeries:
|
AmiiboSeries:
|
||||||
@@ -254,36 +254,44 @@ components:
|
|||||||
schema:
|
schema:
|
||||||
type: string
|
type: string
|
||||||
Identifier:
|
Identifier:
|
||||||
description: The full 16-character hexadecimal identifier of an amiibo to include in the response.
|
description: The full 16-character hexadecimal identifier of an amiibo to include in the response, with an optional `0x` prefix. An empty value is rejected with a `400` response.
|
||||||
name: id
|
name: id
|
||||||
in: query
|
in: query
|
||||||
required: false
|
required: false
|
||||||
schema:
|
schema:
|
||||||
type: string
|
type: string
|
||||||
|
pattern: "^(0x)?[0-9a-fA-F]{16}$"
|
||||||
|
minLength: 16
|
||||||
maxLength: 18
|
maxLength: 18
|
||||||
IdentifierHead:
|
IdentifierHead:
|
||||||
description: The first 8 hexadecimal characters of an amiibo identifier to include in the response.
|
description: The first 8 hexadecimal characters of an amiibo identifier to include in the response, with an optional `0x` prefix. A shorter value matches as a prefix, while an empty value is rejected with a `400` response.
|
||||||
name: head
|
name: head
|
||||||
in: query
|
in: query
|
||||||
required: false
|
required: false
|
||||||
schema:
|
schema:
|
||||||
type: string
|
type: string
|
||||||
|
pattern: "^(0x)?[0-9a-fA-F]+$"
|
||||||
|
minLength: 1
|
||||||
maxLength: 10
|
maxLength: 10
|
||||||
IdentifierTail:
|
IdentifierTail:
|
||||||
description: The last 8 hexadecimal characters of an amiibo identifier to include in the response.
|
description: The last 8 hexadecimal characters of an amiibo identifier to include in the response, with an optional `0x` prefix. A shorter value matches as a prefix, while an empty value is rejected with a `400` response.
|
||||||
name: tail
|
name: tail
|
||||||
in: query
|
in: query
|
||||||
required: false
|
required: false
|
||||||
schema:
|
schema:
|
||||||
type: string
|
type: string
|
||||||
|
pattern: "^(0x)?[0-9a-fA-F]+$"
|
||||||
|
minLength: 1
|
||||||
maxLength: 10
|
maxLength: 10
|
||||||
Key:
|
Key:
|
||||||
description: A hexadecimal key to filter the results by.
|
description: A hexadecimal key to filter the results by, in the `0x`-prefixed format used by the `key` property of the resources. A value without hexadecimal digits after the prefix, or an empty value, is rejected with a `400` response.
|
||||||
name: key
|
name: key
|
||||||
in: query
|
in: query
|
||||||
required: false
|
required: false
|
||||||
schema:
|
schema:
|
||||||
type: string
|
type: string
|
||||||
|
pattern: "^0x[0-9a-fA-F]+$"
|
||||||
|
minLength: 3
|
||||||
Name:
|
Name:
|
||||||
description: A name to filter the results by.
|
description: A name to filter the results by.
|
||||||
name: name
|
name: name
|
||||||
@@ -312,6 +320,8 @@ components:
|
|||||||
application/json:
|
application/json:
|
||||||
schema:
|
schema:
|
||||||
$ref: '#/components/schemas/ServiceError'
|
$ref: '#/components/schemas/ServiceError'
|
||||||
|
InternalServerError:
|
||||||
|
description: The service is currently unavailable.
|
||||||
NotFound:
|
NotFound:
|
||||||
description: No results were found matching the given filter criteria.
|
description: No results were found matching the given filter criteria.
|
||||||
content:
|
content:
|
||||||
@@ -362,9 +372,7 @@ components:
|
|||||||
|
|
||||||
The positions 0 to 7 of the hexadecimal string.
|
The positions 0 to 7 of the hexadecimal string.
|
||||||
type: string
|
type: string
|
||||||
pattern: "^[0-9a-fA-F]+$"
|
pattern: "^[0-9a-fA-F]{8}$"
|
||||||
minLength: 8
|
|
||||||
maxLength: 8
|
|
||||||
image:
|
image:
|
||||||
description: A URL pointing to an image of this amiibo.
|
description: A URL pointing to an image of this amiibo.
|
||||||
type: string
|
type: string
|
||||||
@@ -381,9 +389,7 @@ components:
|
|||||||
|
|
||||||
The positions 8 to 15 of the hexadecimal string.
|
The positions 8 to 15 of the hexadecimal string.
|
||||||
type: string
|
type: string
|
||||||
pattern: "^[0-9a-fA-F]+$"
|
pattern: "^[0-9a-fA-F]{8}$"
|
||||||
minLength: 8
|
|
||||||
maxLength: 8
|
|
||||||
type:
|
type:
|
||||||
description: The type of this amiibo (e.g., Figure, Card, Yarn, Band).
|
description: The type of this amiibo (e.g., Figure, Card, Yarn, Band).
|
||||||
type: string
|
type: string
|
||||||
@@ -418,7 +424,10 @@ components:
|
|||||||
- gameID
|
- gameID
|
||||||
- gameName
|
- gameName
|
||||||
AmiiboRelease:
|
AmiiboRelease:
|
||||||
description: A type that contains the regional release dates of an amiibo.
|
description: |
|
||||||
|
A type that contains the regional release dates of an amiibo.
|
||||||
|
|
||||||
|
Note: The service returns these dates as date-only strings (`yyyy-MM-dd`) without a time component, even though the properties declare the `date-time` format. The `date-time` format is kept deliberately so the generated code produces `Date` values, and the date-only strings are decoded by the custom transcoder configured in the live client, which interprets them as midnight UTC.
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
au:
|
au:
|
||||||
@@ -439,24 +448,34 @@ components:
|
|||||||
format: date-time
|
format: date-time
|
||||||
AmiiboSeries:
|
AmiiboSeries:
|
||||||
description: A type that represents an amiibo series.
|
description: A type that represents an amiibo series.
|
||||||
allOf:
|
type: object
|
||||||
- $ref: '#/components/schemas/Tuple'
|
properties:
|
||||||
- type: object
|
key:
|
||||||
properties:
|
description: The hexadecimal key that uniquely identifies this amiibo series.
|
||||||
key:
|
type: string
|
||||||
description: The hexadecimal key that uniquely identifies this amiibo series.
|
pattern: "^0x[0-9a-fA-F]+$"
|
||||||
name:
|
minLength: 3
|
||||||
description: The name of this amiibo series.
|
name:
|
||||||
|
description: The name of this amiibo series.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- key
|
||||||
|
- name
|
||||||
AmiiboType:
|
AmiiboType:
|
||||||
description: A type that represents an amiibo type (e.g., Figure, Card, Yarn, Band).
|
description: A type that represents an amiibo type (e.g., Figure, Card, Yarn, Band).
|
||||||
allOf:
|
type: object
|
||||||
- $ref: '#/components/schemas/Tuple'
|
properties:
|
||||||
- type: object
|
key:
|
||||||
properties:
|
description: The hexadecimal key that uniquely identifies this amiibo type.
|
||||||
key:
|
type: string
|
||||||
description: The hexadecimal key that uniquely identifies this amiibo type.
|
pattern: "^0x[0-9a-fA-F]+$"
|
||||||
name:
|
minLength: 3
|
||||||
description: The name of this amiibo type.
|
name:
|
||||||
|
description: The name of this amiibo type.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- key
|
||||||
|
- name
|
||||||
AmiiboUsage:
|
AmiiboUsage:
|
||||||
description: A type that represents how an amiibo is used within a game.
|
description: A type that represents how an amiibo is used within a game.
|
||||||
type: object
|
type: object
|
||||||
@@ -472,26 +491,39 @@ components:
|
|||||||
- write
|
- write
|
||||||
GameCharacter:
|
GameCharacter:
|
||||||
description: A type that represents a game character.
|
description: A type that represents a game character.
|
||||||
allOf:
|
type: object
|
||||||
- $ref: '#/components/schemas/Tuple'
|
properties:
|
||||||
- type: object
|
key:
|
||||||
properties:
|
description: The hexadecimal key that uniquely identifies this game character.
|
||||||
key:
|
type: string
|
||||||
description: The hexadecimal key that uniquely identifies this game character.
|
pattern: "^0x[0-9a-fA-F]+$"
|
||||||
name:
|
minLength: 3
|
||||||
description: The name of this game character.
|
name:
|
||||||
|
description: The name of this game character.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- key
|
||||||
|
- name
|
||||||
GameSeries:
|
GameSeries:
|
||||||
description: A type that represents a game series.
|
description: A type that represents a game series.
|
||||||
allOf:
|
type: object
|
||||||
- $ref: '#/components/schemas/Tuple'
|
properties:
|
||||||
- type: object
|
key:
|
||||||
properties:
|
description: The hexadecimal key that uniquely identifies this game series.
|
||||||
key:
|
type: string
|
||||||
description: The hexadecimal key that uniquely identifies this game series.
|
pattern: "^0x[0-9a-fA-F]+$"
|
||||||
name:
|
minLength: 3
|
||||||
description: The name of this game series.
|
name:
|
||||||
|
description: The name of this game series.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- key
|
||||||
|
- name
|
||||||
LastUpdated:
|
LastUpdated:
|
||||||
description: A type that contains the date and time when the service data was last updated.
|
description: |
|
||||||
|
A type that contains the date and time when the service data was last updated.
|
||||||
|
|
||||||
|
Note: The service returns this timestamp in the `yyyy-MM-dd'T'HH:mm:ss.SSSSSS` format without a timezone offset, so it is not a strictly valid RFC 3339 `date-time` value. The `date-time` format is kept deliberately so the generated code produces a `Date` value, and the timestamp is decoded by the custom transcoder configured in the live client, which interprets it as UTC.
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
lastUpdated:
|
lastUpdated:
|
||||||
@@ -500,27 +532,38 @@ components:
|
|||||||
format: date-time
|
format: date-time
|
||||||
required:
|
required:
|
||||||
- lastUpdated
|
- lastUpdated
|
||||||
Tuple:
|
# List Entities
|
||||||
description: |
|
AmiiboList:
|
||||||
A base type composed of a `key` and `name` pair.
|
description: A list that contains amiibos.
|
||||||
|
type: array
|
||||||
This type is the base schema for the `AmiiboSeries`, `AmiiboType`, `GameCharacter`, and `GameSeries` types.
|
items:
|
||||||
type: object
|
$ref: '#/components/schemas/Amiibo'
|
||||||
properties:
|
AmiiboSeriesList:
|
||||||
key:
|
description: A list that contains amiibo series.
|
||||||
description: A hexadecimal key that uniquely identifies this resource.
|
type: array
|
||||||
type: string
|
items:
|
||||||
pattern: "^0x[0-9a-fA-F]+$"
|
$ref: '#/components/schemas/AmiiboSeries'
|
||||||
minLength: 3
|
AmiiboTypeList:
|
||||||
name:
|
description: A list that contains amiibo types.
|
||||||
description: A display name for this resource.
|
type: array
|
||||||
type: string
|
items:
|
||||||
required:
|
$ref: '#/components/schemas/AmiiboType'
|
||||||
- key
|
GameCharacterList:
|
||||||
- name
|
description: A list that contains game characters.
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
$ref: '#/components/schemas/GameCharacter'
|
||||||
|
GameSeriesList:
|
||||||
|
description: A list that contains game series.
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
$ref: '#/components/schemas/GameSeries'
|
||||||
# Wrapper Entities
|
# Wrapper Entities
|
||||||
AmiiboWrapper:
|
AmiiboWrapper:
|
||||||
description: A response wrapper that contains zero, one, or more amiibos.
|
description: |
|
||||||
|
A response wrapper that contains zero, one, or more amiibos.
|
||||||
|
|
||||||
|
Note: Unlike the other response wrappers, the `amiibo` property is deliberately not required: the service returns `"amiibo": null` when an `id` filter matches nothing, and an empty list when other filters match nothing. The property must therefore remain optional for decoding to succeed in both cases.
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
amiibo:
|
amiibo:
|
||||||
@@ -528,10 +571,8 @@ components:
|
|||||||
oneOf:
|
oneOf:
|
||||||
- $ref: '#/components/schemas/Amiibo'
|
- $ref: '#/components/schemas/Amiibo'
|
||||||
description: A certain amiibo.
|
description: A certain amiibo.
|
||||||
- type: array
|
- $ref: '#/components/schemas/AmiiboList'
|
||||||
description: A list that contains amiibos.
|
description: A list that contains amiibos.
|
||||||
items:
|
|
||||||
$ref: '#/components/schemas/Amiibo'
|
|
||||||
AmiiboSeriesWrapper:
|
AmiiboSeriesWrapper:
|
||||||
description: A response wrapper that contains one or more amiibo series.
|
description: A response wrapper that contains one or more amiibo series.
|
||||||
type: object
|
type: object
|
||||||
@@ -541,10 +582,8 @@ components:
|
|||||||
oneOf:
|
oneOf:
|
||||||
- $ref: '#/components/schemas/AmiiboSeries'
|
- $ref: '#/components/schemas/AmiiboSeries'
|
||||||
description: A certain amiibo series.
|
description: A certain amiibo series.
|
||||||
- type: array
|
- $ref: '#/components/schemas/AmiiboSeriesList'
|
||||||
description: A list that contains amiibo series.
|
description: A list that contains amiibo series.
|
||||||
items:
|
|
||||||
$ref: '#/components/schemas/AmiiboSeries'
|
|
||||||
required:
|
required:
|
||||||
- amiibo
|
- amiibo
|
||||||
AmiiboTypeWrapper:
|
AmiiboTypeWrapper:
|
||||||
@@ -556,10 +595,8 @@ components:
|
|||||||
oneOf:
|
oneOf:
|
||||||
- $ref: '#/components/schemas/AmiiboType'
|
- $ref: '#/components/schemas/AmiiboType'
|
||||||
description: A certain amiibo type.
|
description: A certain amiibo type.
|
||||||
- type: array
|
- $ref: '#/components/schemas/AmiiboTypeList'
|
||||||
description: A list that contains amiibo types.
|
description: A list that contains amiibo types.
|
||||||
items:
|
|
||||||
$ref: '#/components/schemas/AmiiboType'
|
|
||||||
required:
|
required:
|
||||||
- amiibo
|
- amiibo
|
||||||
GameCharacterWrapper:
|
GameCharacterWrapper:
|
||||||
@@ -571,10 +608,8 @@ components:
|
|||||||
oneOf:
|
oneOf:
|
||||||
- $ref: '#/components/schemas/GameCharacter'
|
- $ref: '#/components/schemas/GameCharacter'
|
||||||
description: A certain game character.
|
description: A certain game character.
|
||||||
- type: array
|
- $ref: '#/components/schemas/GameCharacterList'
|
||||||
description: A list that contains game characters.
|
description: A list that contains game characters.
|
||||||
items:
|
|
||||||
$ref: '#/components/schemas/GameCharacter'
|
|
||||||
required:
|
required:
|
||||||
- amiibo
|
- amiibo
|
||||||
GameSeriesWrapper:
|
GameSeriesWrapper:
|
||||||
@@ -586,10 +621,8 @@ components:
|
|||||||
oneOf:
|
oneOf:
|
||||||
- $ref: '#/components/schemas/GameSeries'
|
- $ref: '#/components/schemas/GameSeries'
|
||||||
description: A certain game series.
|
description: A certain game series.
|
||||||
- type: array
|
- $ref: '#/components/schemas/GameSeriesList'
|
||||||
description: A list that contains game series.
|
description: A list that contains game series.
|
||||||
items:
|
|
||||||
$ref: '#/components/schemas/GameSeries'
|
|
||||||
required:
|
required:
|
||||||
- amiibo
|
- amiibo
|
||||||
# Error Entities
|
# Error Entities
|
||||||
|
|||||||
@@ -0,0 +1,78 @@
|
|||||||
|
// ===----------------------------------------------------------------------===
|
||||||
|
//
|
||||||
|
// This source file is part of the Amiibo Service open source project
|
||||||
|
//
|
||||||
|
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
|
||||||
|
// Licensed under Apache license v2.0
|
||||||
|
//
|
||||||
|
// See LICENSE for license information
|
||||||
|
// See CONTRIBUTORS for the list of Amiibo Service project authors
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
//
|
||||||
|
// ===----------------------------------------------------------------------===
|
||||||
|
|
||||||
|
@testable import AmiiboService
|
||||||
|
import Foundation
|
||||||
|
import Testing
|
||||||
|
|
||||||
|
@Suite("ISO Date Time Transcoder")
|
||||||
|
struct ISODateTimeTranscoderTests {
|
||||||
|
|
||||||
|
// MARK: Properties
|
||||||
|
|
||||||
|
private let transcoder = ISODateTimeTranscoder()
|
||||||
|
|
||||||
|
// MARK: Decode tests
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `decodes a timestamp as UTC`() throws {
|
||||||
|
// GIVEN
|
||||||
|
let string = "2026-07-24T12:34:56.123000"
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
let date = try transcoder.decode(string)
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
#expect(abs(date.timeIntervalSince(.utc(2026, 7, 24, 12, 34, 56)) - 0.123) < 0.001)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `decodes a date-only string as midnight UTC`() throws {
|
||||||
|
// GIVEN
|
||||||
|
let string = "2014-11-21"
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
let date = try transcoder.decode(string)
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
#expect(date == .utc(2014, 11, 21))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(arguments: [
|
||||||
|
"", "2014-11", "2014-11-21T12:34:56", "2014-11-21T12:34:56Z", "21/11/2014", "yesterday"
|
||||||
|
])
|
||||||
|
func `throws a decoding error for an unsupported string`(string: String) {
|
||||||
|
// GIVEN
|
||||||
|
// WHEN
|
||||||
|
// THEN
|
||||||
|
#expect(throws: DecodingError.self) {
|
||||||
|
try transcoder.decode(string)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: Encode tests
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `encodes a date as a timestamp`() throws {
|
||||||
|
// GIVEN
|
||||||
|
let date: Date = .utc(2026, 7, 24, 12, 34, 56)
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
let string = try transcoder.encode(date)
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
#expect(string == "2026-07-24T12:34:56.000000")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,480 @@
|
|||||||
|
// ===----------------------------------------------------------------------===
|
||||||
|
//
|
||||||
|
// This source file is part of the Amiibo Service open source project
|
||||||
|
//
|
||||||
|
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
|
||||||
|
// Licensed under Apache license v2.0
|
||||||
|
//
|
||||||
|
// See LICENSE for license information
|
||||||
|
// See CONTRIBUTORS for the list of Amiibo Service project authors
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
//
|
||||||
|
// ===----------------------------------------------------------------------===
|
||||||
|
|
||||||
|
@testable import AmiiboService
|
||||||
|
import Foundation
|
||||||
|
import HTTPTypes
|
||||||
|
import Testing
|
||||||
|
|
||||||
|
@Suite("Amiibo Live Client")
|
||||||
|
struct AmiiboLiveClientTests {
|
||||||
|
|
||||||
|
// MARK: Server URL tests
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `resolves the server URL defined in the OpenAPI specification`() throws {
|
||||||
|
// GIVEN
|
||||||
|
// WHEN
|
||||||
|
let url = try Servers.Server1.url()
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
#expect(url.absoluteString == "https://www.amiiboapi.org/api")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `uses the server URL from the OpenAPI specification`() throws {
|
||||||
|
// GIVEN
|
||||||
|
let expected = try Servers.Server1.url()
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
let url = AmiiboLiveClient.serverURL
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
#expect(url == expected)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: Error mapping tests
|
||||||
|
|
||||||
|
@Test(arguments: zip(
|
||||||
|
TransportErrors.thrown,
|
||||||
|
TransportErrors.expected
|
||||||
|
))
|
||||||
|
func `maps an error thrown by the transport to the matching service error`(
|
||||||
|
thrown: any Error,
|
||||||
|
expected: AmiiboServiceError
|
||||||
|
) async {
|
||||||
|
// GIVEN
|
||||||
|
let client = AmiiboLiveClient(transport: ThrowingTransport(error: thrown))
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
// THEN
|
||||||
|
await #expect(throws: expected) {
|
||||||
|
try await client.getAmiibos(by: .init())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(arguments: zip(
|
||||||
|
Responses.failing,
|
||||||
|
Responses.expected
|
||||||
|
))
|
||||||
|
func `maps a response status to the matching service error`(
|
||||||
|
response: (status: Int, json: String?),
|
||||||
|
expected: AmiiboServiceError
|
||||||
|
) async {
|
||||||
|
// GIVEN
|
||||||
|
let client = AmiiboLiveClient(transport: StubTransport(
|
||||||
|
status: .init(code: response.status),
|
||||||
|
json: response.json
|
||||||
|
))
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
// THEN
|
||||||
|
await #expect(throws: expected) {
|
||||||
|
try await client.getAmiibos(by: .init())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: Get Amiibos tests
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `returns amiibos sorted by identifier`() async throws {
|
||||||
|
// GIVEN
|
||||||
|
let client = AmiiboLiveClient(transport: StubTransport(status: .ok, json: JSON.amiibos))
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
let amiibos = try await client.getAmiibos(by: .init())
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
#expect(amiibos.map(\.identifier) == ["0000000000000002", "0100000000040002"])
|
||||||
|
#expect(amiibos.map(\.name) == ["Mario", "Zelda"])
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `returns a single amiibo when the response holds an object`() async throws {
|
||||||
|
// GIVEN
|
||||||
|
let client = AmiiboLiveClient(transport: StubTransport(status: .ok, json: JSON.amiibo))
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
let amiibos = try await client.getAmiibos(by: .init(identifier: "0100000000040002"))
|
||||||
|
let amiibo = try #require(amiibos.first)
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
#expect(amiibos.count == 1)
|
||||||
|
#expect(amiibo.head == "01000000")
|
||||||
|
#expect(amiibo.tail == "00040002")
|
||||||
|
#expect(amiibo.name == "Zelda")
|
||||||
|
#expect(amiibo.type == "Figure")
|
||||||
|
#expect(amiibo.series == "Super Smash Bros.")
|
||||||
|
#expect(amiibo.gameCharacter == "Zelda")
|
||||||
|
#expect(amiibo.gameSeries == "The Legend of Zelda")
|
||||||
|
#expect(amiibo.imageURL?.host() == "example.com")
|
||||||
|
#expect(amiibo.platform == nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `returns no amiibos when the response holds null`() async throws {
|
||||||
|
// GIVEN
|
||||||
|
let client = AmiiboLiveClient(transport: StubTransport(status: .ok, json: JSON.amiibosNull))
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
let amiibos = try await client.getAmiibos(by: .init(identifier: "0000000000000000"))
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
#expect(amiibos.isEmpty)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `returns no amiibos when the response holds an empty list`() async throws {
|
||||||
|
// GIVEN
|
||||||
|
let client = AmiiboLiveClient(transport: StubTransport(status: .ok, json: JSON.amiibosEmpty))
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
let amiibos = try await client.getAmiibos(by: .init(name: "Something"))
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
#expect(amiibos.isEmpty)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `decodes release dates as midnight UTC, and missing or null ones as nil`() async throws {
|
||||||
|
// GIVEN
|
||||||
|
let client = AmiiboLiveClient(transport: StubTransport(status: .ok, json: JSON.amiibos))
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
let amiibos = try await client.getAmiibos(by: .init())
|
||||||
|
let mario = try #require(amiibos.first)
|
||||||
|
let zelda = try #require(amiibos.last)
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
#expect(mario.release.america == .utc(2014, 11, 21))
|
||||||
|
#expect(mario.release.australia == .utc(2014, 11, 29))
|
||||||
|
#expect(mario.release.europe == .utc(2014, 11, 28))
|
||||||
|
#expect(mario.release.japan == .utc(2014, 12, 6))
|
||||||
|
#expect(zelda.release.australia == nil)
|
||||||
|
#expect(zelda.release.japan == nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `maps related games and usages into the platform`() async throws {
|
||||||
|
// GIVEN
|
||||||
|
let client = AmiiboLiveClient(transport: StubTransport(status: .ok, json: JSON.amiiboWithGames))
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
let amiibos = try await client.getAmiibos(by: .init(showUsage: true))
|
||||||
|
let platform = try #require(amiibos.first?.platform)
|
||||||
|
let game = try #require(platform.switch.first)
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
#expect(platform.switch.count == 1)
|
||||||
|
#expect(platform.switch2.isEmpty)
|
||||||
|
#expect(platform.threeDS.isEmpty)
|
||||||
|
#expect(platform.wiiU.count == 1)
|
||||||
|
#expect(game.identifiers == ["01007EF00011E000"])
|
||||||
|
#expect(game.name == "The Legend of Zelda: Breath of the Wild")
|
||||||
|
#expect(game.usages == [.init(explanation: "Spawns a random selection of items.", isWriteable: false)])
|
||||||
|
#expect(platform.wiiU.first?.usages == nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `encodes the amiibo filter as query parameters`() async throws {
|
||||||
|
// GIVEN
|
||||||
|
let client = AmiiboLiveClient(transport: StubTransport { request in
|
||||||
|
let path = request.path ?? ""
|
||||||
|
|
||||||
|
#expect(path.hasPrefix("/amiibo?"))
|
||||||
|
#expect(path.contains("id=0100000000040002"))
|
||||||
|
#expect(path.contains("head=01000000"))
|
||||||
|
#expect(path.contains("tail=00040002"))
|
||||||
|
#expect(path.contains("name=zelda"))
|
||||||
|
#expect(path.contains("type=0x00"))
|
||||||
|
#expect(path.contains("amiiboSeries=0x00"))
|
||||||
|
#expect(path.contains("character=0x0100"))
|
||||||
|
#expect(path.contains("gameseries=0x010"))
|
||||||
|
#expect(path.contains("showgames=true"))
|
||||||
|
#expect(path.contains("showusage=false"))
|
||||||
|
|
||||||
|
return StubTransport.response(status: .ok, json: JSON.amiibosEmpty)
|
||||||
|
})
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
// THEN
|
||||||
|
_ = try await client.getAmiibos(by: .init(
|
||||||
|
head: "01000000",
|
||||||
|
tail: "00040002",
|
||||||
|
identifier: "0100000000040002",
|
||||||
|
name: "zelda",
|
||||||
|
type: "0x00",
|
||||||
|
series: "0x00",
|
||||||
|
gameCharacter: "0x0100",
|
||||||
|
gameSeries: "0x010",
|
||||||
|
showGames: true,
|
||||||
|
showUsage: false
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `omits nil filter values from the query`() async throws {
|
||||||
|
// GIVEN
|
||||||
|
let client = AmiiboLiveClient(transport: StubTransport { request in
|
||||||
|
#expect(request.path == "/amiibo")
|
||||||
|
|
||||||
|
return StubTransport.response(status: .ok, json: JSON.amiibosEmpty)
|
||||||
|
})
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
// THEN
|
||||||
|
_ = try await client.getAmiibos(by: .init())
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: Key-name endpoints tests
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `returns amiibo series sorted by key`() async throws {
|
||||||
|
// GIVEN
|
||||||
|
let client = AmiiboLiveClient(transport: StubTransport(status: .ok, json: JSON.keyNameList))
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
let series = try await client.getAmiiboSeries(by: .init())
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
#expect(series == [.init(key: "0x00", name: "Second"), .init(key: "0x01", name: "First")])
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `returns a single amiibo series when the response holds an object`() async throws {
|
||||||
|
// GIVEN
|
||||||
|
let client = AmiiboLiveClient(transport: StubTransport { request in
|
||||||
|
#expect(request.path == "/amiiboseries?key=0x01")
|
||||||
|
|
||||||
|
return StubTransport.response(status: .ok, json: JSON.keyName)
|
||||||
|
})
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
let series = try await client.getAmiiboSeries(by: .init(key: "0x01"))
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
#expect(series == [.init(key: "0x01", name: "First")])
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `returns amiibo types sorted by key`() async throws {
|
||||||
|
// GIVEN
|
||||||
|
let client = AmiiboLiveClient(transport: StubTransport { request in
|
||||||
|
#expect(request.path == "/type")
|
||||||
|
|
||||||
|
return StubTransport.response(status: .ok, json: JSON.keyNameList)
|
||||||
|
})
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
let types = try await client.getAmiiboTypes(by: .init())
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
#expect(types == [.init(key: "0x00", name: "Second"), .init(key: "0x01", name: "First")])
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `returns game characters sorted by key`() async throws {
|
||||||
|
// GIVEN
|
||||||
|
let client = AmiiboLiveClient(transport: StubTransport { request in
|
||||||
|
#expect(request.path == "/character?name=First")
|
||||||
|
|
||||||
|
return StubTransport.response(status: .ok, json: JSON.keyNameList)
|
||||||
|
})
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
let characters = try await client.getGameCharacters(by: .init(name: "First"))
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
#expect(characters == [.init(key: "0x00", name: "Second"), .init(key: "0x01", name: "First")])
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `returns game series sorted by key`() async throws {
|
||||||
|
// GIVEN
|
||||||
|
let client = AmiiboLiveClient(transport: StubTransport { request in
|
||||||
|
#expect(request.path == "/gameseries")
|
||||||
|
|
||||||
|
return StubTransport.response(status: .ok, json: JSON.keyNameList)
|
||||||
|
})
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
let series = try await client.getGameSeries(by: .init())
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
#expect(series == [.init(key: "0x00", name: "Second"), .init(key: "0x01", name: "First")])
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `throws notFound when a key-name endpoint matches nothing`() async {
|
||||||
|
// GIVEN
|
||||||
|
let client = AmiiboLiveClient(transport: StubTransport(status: .notFound, json: JSON.notFound))
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
// THEN
|
||||||
|
await #expect(throws: AmiiboServiceError.notFound) {
|
||||||
|
try await client.getGameSeries(by: .init(key: "0xffff"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: Get Last Updated tests
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `returns the last updated timestamp as UTC`() async throws {
|
||||||
|
// GIVEN
|
||||||
|
let client = AmiiboLiveClient(transport: StubTransport { request in
|
||||||
|
#expect(request.path == "/lastupdated")
|
||||||
|
|
||||||
|
return StubTransport.response(status: .ok, json: JSON.lastUpdated)
|
||||||
|
})
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
let lastUpdated = try await client.getLastUpdated()
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
#expect(lastUpdated == .utc(2026, 7, 24, 12, 34, 56))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `throws notAvailable when the last updated endpoint fails`() async {
|
||||||
|
// GIVEN
|
||||||
|
let client = AmiiboLiveClient(transport: StubTransport(status: .internalServerError))
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
// THEN
|
||||||
|
await #expect(throws: AmiiboServiceError.notAvailable) {
|
||||||
|
try await client.getLastUpdated()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Arguments
|
||||||
|
|
||||||
|
private enum TransportErrors {
|
||||||
|
/// Errors thrown by the transport.
|
||||||
|
static let thrown: [any Error] = [
|
||||||
|
CancellationError(),
|
||||||
|
URLError(.cancelled),
|
||||||
|
URLError(.cannotParseResponse),
|
||||||
|
URLError(.notConnectedToInternet),
|
||||||
|
URLError(.timedOut),
|
||||||
|
URLError(.badURL)
|
||||||
|
]
|
||||||
|
/// The service error expected for each thrown error.
|
||||||
|
static let expected: [AmiiboServiceError] = [
|
||||||
|
.cancelled,
|
||||||
|
.cancelled,
|
||||||
|
.decoding,
|
||||||
|
.notAvailable,
|
||||||
|
.notAvailable,
|
||||||
|
.unknown(String(describing: URLError(.badURL)))
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
private enum Responses {
|
||||||
|
/// Failing responses, with a body where the specification documents one.
|
||||||
|
static let failing: [(status: Int, json: String?)] = [
|
||||||
|
(400, JSON.badRequest),
|
||||||
|
(404, JSON.notFound),
|
||||||
|
(500, nil),
|
||||||
|
(418, nil),
|
||||||
|
(200, "not json")
|
||||||
|
]
|
||||||
|
/// The service error expected for each failing response.
|
||||||
|
static let expected: [AmiiboServiceError] = [
|
||||||
|
.badRequest,
|
||||||
|
.notFound,
|
||||||
|
.notAvailable,
|
||||||
|
.undocumented(418),
|
||||||
|
.decoding
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Payloads
|
||||||
|
|
||||||
|
private enum JSON {
|
||||||
|
/// Two amiibos in reverse identifier order; the first lacks `au` and has a null `jp`.
|
||||||
|
static let amiibos = """
|
||||||
|
{"amiibo": [
|
||||||
|
{
|
||||||
|
"amiiboSeries": "Super Smash Bros.", "character": "Zelda", "gameSeries": "The Legend of Zelda",
|
||||||
|
"head": "01000000", "tail": "00040002", "name": "Zelda", "type": "Figure",
|
||||||
|
"image": "https://example.com/zelda.png",
|
||||||
|
"release": {"eu": "2014-11-28", "jp": null, "na": "2014-11-21"}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"amiiboSeries": "Super Smash Bros.", "character": "Mario", "gameSeries": "Super Mario",
|
||||||
|
"head": "00000000", "tail": "00000002", "name": "Mario", "type": "Figure",
|
||||||
|
"image": "https://example.com/mario.png",
|
||||||
|
"release": {"au": "2014-11-29", "eu": "2014-11-28", "jp": "2014-12-06", "na": "2014-11-21"}
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
"""
|
||||||
|
/// A single amiibo, as returned for an `id` filter.
|
||||||
|
static let amiibo = """
|
||||||
|
{"amiibo": {
|
||||||
|
"amiiboSeries": "Super Smash Bros.", "character": "Zelda", "gameSeries": "The Legend of Zelda",
|
||||||
|
"head": "01000000", "tail": "00040002", "name": "Zelda", "type": "Figure",
|
||||||
|
"image": "https://example.com/zelda.png",
|
||||||
|
"release": {"au": "2014-12-04", "eu": "2014-11-28", "jp": "2014-12-06", "na": "2014-11-21"}
|
||||||
|
}}
|
||||||
|
"""
|
||||||
|
/// An amiibo with Switch and Wii U games, an empty 3DS list, and no Switch 2 key.
|
||||||
|
static let amiiboWithGames = """
|
||||||
|
{"amiibo": [{
|
||||||
|
"amiiboSeries": "Super Smash Bros.", "character": "Zelda", "gameSeries": "The Legend of Zelda",
|
||||||
|
"head": "01000000", "tail": "00040002", "name": "Zelda", "type": "Figure",
|
||||||
|
"image": "https://example.com/zelda.png",
|
||||||
|
"release": {"na": "2014-11-21"},
|
||||||
|
"games3DS": [],
|
||||||
|
"gamesSwitch": [{
|
||||||
|
"gameID": ["01007EF00011E000"],
|
||||||
|
"gameName": "The Legend of Zelda: Breath of the Wild",
|
||||||
|
"amiiboUsage": [{"Usage": "Spawns a random selection of items.", "write": false}]
|
||||||
|
}],
|
||||||
|
"gamesWiiU": [{
|
||||||
|
"gameID": ["0005000010145000"],
|
||||||
|
"gameName": "Super Smash Bros. for Wii U"
|
||||||
|
}]
|
||||||
|
}]}
|
||||||
|
"""
|
||||||
|
/// The response for an `id` filter that matches nothing.
|
||||||
|
static let amiibosNull = """
|
||||||
|
{"amiibo": null}
|
||||||
|
"""
|
||||||
|
/// The response for any other filter that matches nothing.
|
||||||
|
static let amiibosEmpty = """
|
||||||
|
{"amiibo": []}
|
||||||
|
"""
|
||||||
|
/// Two key-name items in reverse key order.
|
||||||
|
static let keyNameList = """
|
||||||
|
{"amiibo": [{"key": "0x01", "name": "First"}, {"key": "0x00", "name": "Second"}]}
|
||||||
|
"""
|
||||||
|
/// A single key-name item, as returned for a `key` filter.
|
||||||
|
static let keyName = """
|
||||||
|
{"amiibo": {"key": "0x01", "name": "First"}}
|
||||||
|
"""
|
||||||
|
/// The last updated timestamp.
|
||||||
|
static let lastUpdated = """
|
||||||
|
{"lastUpdated": "2026-07-24T12:34:56.000000"}
|
||||||
|
"""
|
||||||
|
/// The body of a 400 response.
|
||||||
|
static let badRequest = """
|
||||||
|
{"code": 400, "error": "Bad request."}
|
||||||
|
"""
|
||||||
|
/// The body of a 404 response.
|
||||||
|
static let notFound = """
|
||||||
|
{"code": 404, "error": "Not found."}
|
||||||
|
"""
|
||||||
|
}
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
// ===----------------------------------------------------------------------===
|
||||||
|
//
|
||||||
|
// This source file is part of the Amiibo Service open source project
|
||||||
|
//
|
||||||
|
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
|
||||||
|
// Licensed under Apache license v2.0
|
||||||
|
//
|
||||||
|
// See LICENSE for license information
|
||||||
|
// See CONTRIBUTORS for the list of Amiibo Service project authors
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
//
|
||||||
|
// ===----------------------------------------------------------------------===
|
||||||
|
|
||||||
|
import AmiiboService
|
||||||
|
import Testing
|
||||||
|
|
||||||
|
@Suite("Filter conformances")
|
||||||
|
struct FilterConformanceTests {
|
||||||
|
|
||||||
|
// MARK: Equatable tests
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `compares amiibo filters by value`() {
|
||||||
|
// GIVEN
|
||||||
|
// WHEN
|
||||||
|
// THEN
|
||||||
|
#expect(AmiiboFilter() == AmiiboFilter())
|
||||||
|
#expect(AmiiboFilter(name: "zelda") == AmiiboFilter(name: "zelda"))
|
||||||
|
#expect(AmiiboFilter(name: "zelda") != AmiiboFilter(name: "mario"))
|
||||||
|
#expect(AmiiboFilter() != AmiiboFilter(showGames: true))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `compares key-name filters by value`() {
|
||||||
|
// GIVEN
|
||||||
|
// WHEN
|
||||||
|
// THEN
|
||||||
|
#expect(AmiiboSeriesFilter() == AmiiboSeriesFilter())
|
||||||
|
#expect(AmiiboSeriesFilter(key: "0x01") == AmiiboSeriesFilter(key: "0x01"))
|
||||||
|
#expect(AmiiboSeriesFilter(key: "0x01") != AmiiboSeriesFilter(name: "0x01"))
|
||||||
|
#expect(AmiiboTypeFilter(name: "Card") != AmiiboTypeFilter(name: "Figure"))
|
||||||
|
#expect(GameCharacterFilter(key: "0x0100") != GameCharacterFilter())
|
||||||
|
#expect(GameSeriesFilter(name: "Pikmin") == GameSeriesFilter(name: "Pikmin"))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: Hashable tests
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `hashes equal filters alike`() {
|
||||||
|
// GIVEN
|
||||||
|
let amiiboFilters: Set = [AmiiboFilter(name: "zelda"), AmiiboFilter(name: "zelda"), AmiiboFilter(name: "mario")]
|
||||||
|
let seriesFilters: Set = [AmiiboSeriesFilter(key: "0x01"), AmiiboSeriesFilter(key: "0x01"), AmiiboSeriesFilter()]
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
// THEN
|
||||||
|
#expect(amiiboFilters.count == 2)
|
||||||
|
#expect(seriesFilters.count == 2)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
// ===----------------------------------------------------------------------===
|
||||||
|
//
|
||||||
|
// This source file is part of the Amiibo Service open source project
|
||||||
|
//
|
||||||
|
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
|
||||||
|
// Licensed under Apache license v2.0
|
||||||
|
//
|
||||||
|
// See LICENSE for license information
|
||||||
|
// See CONTRIBUTORS for the list of Amiibo Service project authors
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
//
|
||||||
|
// ===----------------------------------------------------------------------===
|
||||||
|
|
||||||
|
import AmiiboService
|
||||||
|
import Foundation
|
||||||
|
import Testing
|
||||||
|
|
||||||
|
@Suite("Model conformances")
|
||||||
|
struct ModelConformanceTests {
|
||||||
|
|
||||||
|
// MARK: Identifiable tests
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `identifies an amiibo by its identifier`() {
|
||||||
|
// GIVEN
|
||||||
|
let amiibos = Fixtures.amiibos
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
// THEN
|
||||||
|
#expect(amiibos.map(\.id) == amiibos.map(\.identifier))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `identifies key-name models by their keys`() {
|
||||||
|
// GIVEN
|
||||||
|
// WHEN
|
||||||
|
// THEN
|
||||||
|
#expect(Fixtures.amiiboSeries.map(\.id) == Fixtures.amiiboSeries.map(\.key))
|
||||||
|
#expect(Fixtures.amiiboTypes.map(\.id) == Fixtures.amiiboTypes.map(\.key))
|
||||||
|
#expect(Fixtures.gameCharacters.map(\.id) == Fixtures.gameCharacters.map(\.key))
|
||||||
|
#expect(Fixtures.gameSeries.map(\.id) == Fixtures.gameSeries.map(\.key))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: Codable tests
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `round-trips amiibos through JSON`() throws {
|
||||||
|
// GIVEN
|
||||||
|
let amiibos = Fixtures.amiibos
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
let decoded = try roundTrip(amiibos)
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
#expect(decoded == amiibos)
|
||||||
|
#expect(decoded.first?.platform?.switch.first?.usages?.isEmpty == false)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `round-trips key-name models through JSON`() throws {
|
||||||
|
// GIVEN
|
||||||
|
// WHEN
|
||||||
|
// THEN
|
||||||
|
#expect(try roundTrip(Fixtures.amiiboSeries) == Fixtures.amiiboSeries)
|
||||||
|
#expect(try roundTrip(Fixtures.amiiboTypes) == Fixtures.amiiboTypes)
|
||||||
|
#expect(try roundTrip(Fixtures.gameCharacters) == Fixtures.gameCharacters)
|
||||||
|
#expect(try roundTrip(Fixtures.gameSeries) == Fixtures.gameSeries)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Helpers
|
||||||
|
|
||||||
|
private extension ModelConformanceTests {
|
||||||
|
|
||||||
|
// MARK: Functions
|
||||||
|
|
||||||
|
/// Encodes a value to JSON and decodes it back.
|
||||||
|
func roundTrip<Value: Codable>(_ value: Value) throws -> Value {
|
||||||
|
try JSONDecoder().decode(Value.self, from: JSONEncoder().encode(value))
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -16,7 +16,14 @@ import AmiiboService
|
|||||||
import Foundation
|
import Foundation
|
||||||
import Testing
|
import Testing
|
||||||
|
|
||||||
@Suite("Amiibo Service", .tags(.live))
|
@Suite(
|
||||||
|
"Amiibo Service",
|
||||||
|
.tags(.live),
|
||||||
|
.enabled(
|
||||||
|
if: ProcessInfo.processInfo.environment["AMIIBO_LIVE_TESTS"] == "1",
|
||||||
|
"Set the 'AMIIBO_LIVE_TESTS' environment variable to '1' to run these tests against the live service."
|
||||||
|
)
|
||||||
|
)
|
||||||
struct AmiiboServiceLiveTests {
|
struct AmiiboServiceLiveTests {
|
||||||
|
|
||||||
// MARK: Properties
|
// MARK: Properties
|
||||||
@@ -31,18 +38,17 @@ struct AmiiboServiceLiveTests {
|
|||||||
|
|
||||||
// MARK: Functions tests
|
// MARK: Functions tests
|
||||||
|
|
||||||
#if swift(>=6.2)
|
|
||||||
@Test(arguments: zip(
|
@Test(arguments: zip(
|
||||||
Input.amiibos,
|
Input.amiibos,
|
||||||
Output.amiibos
|
Output.amiibos
|
||||||
))
|
))
|
||||||
func `get amiibos`(
|
func `get amiibos`(
|
||||||
filter: AmiiboFilter,
|
filter: AmiiboFilter,
|
||||||
expects numberOfItems: Int
|
expects count: ExpectedCount
|
||||||
) async throws {
|
) async throws {
|
||||||
try await assertAmiibos(
|
try await assertAmiibos(
|
||||||
with: filter,
|
with: filter,
|
||||||
expects: numberOfItems
|
expects: count
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,11 +72,11 @@ struct AmiiboServiceLiveTests {
|
|||||||
))
|
))
|
||||||
func `get amiibo series`(
|
func `get amiibo series`(
|
||||||
filter: AmiiboSeriesFilter,
|
filter: AmiiboSeriesFilter,
|
||||||
expects numberOfItems: Int
|
expects count: ExpectedCount
|
||||||
) async throws {
|
) async throws {
|
||||||
try await assertAmiiboSeries(
|
try await assertAmiiboSeries(
|
||||||
with: filter,
|
with: filter,
|
||||||
expects: numberOfItems
|
expects: count
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,11 +100,11 @@ struct AmiiboServiceLiveTests {
|
|||||||
))
|
))
|
||||||
func `get amiibo types`(
|
func `get amiibo types`(
|
||||||
filter: AmiiboTypeFilter,
|
filter: AmiiboTypeFilter,
|
||||||
expects numberOfItems: Int
|
expects count: ExpectedCount
|
||||||
) async throws {
|
) async throws {
|
||||||
try await assertAmiiboTypes(
|
try await assertAmiiboTypes(
|
||||||
with: filter,
|
with: filter,
|
||||||
expects: numberOfItems
|
expects: count
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,11 +128,11 @@ struct AmiiboServiceLiveTests {
|
|||||||
))
|
))
|
||||||
func `get game characters`(
|
func `get game characters`(
|
||||||
filter: GameCharacterFilter,
|
filter: GameCharacterFilter,
|
||||||
expects numberOfItems: Int
|
expects count: ExpectedCount
|
||||||
) async throws {
|
) async throws {
|
||||||
try await assertGameCharacters(
|
try await assertGameCharacters(
|
||||||
with: filter,
|
with: filter,
|
||||||
expects: numberOfItems
|
expects: count
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -150,11 +156,11 @@ struct AmiiboServiceLiveTests {
|
|||||||
))
|
))
|
||||||
func `get game series`(
|
func `get game series`(
|
||||||
filter: GameSeriesFilter,
|
filter: GameSeriesFilter,
|
||||||
expects numberOfItems: Int
|
expects count: ExpectedCount
|
||||||
) async throws {
|
) async throws {
|
||||||
try await assertGameSeries(
|
try await assertGameSeries(
|
||||||
with: filter,
|
with: filter,
|
||||||
expects: numberOfItems
|
expects: count
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -175,161 +181,11 @@ struct AmiiboServiceLiveTests {
|
|||||||
@Test
|
@Test
|
||||||
func `get the last updated timestamp`() async throws {
|
func `get the last updated timestamp`() async throws {
|
||||||
try await assertLastUpdated(
|
try await assertLastUpdated(
|
||||||
day: 26,
|
onOrAfterDay: 22,
|
||||||
month: 3,
|
month: 10,
|
||||||
year: 2026
|
year: 2026
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
@Test("get amiibos", arguments: zip(
|
|
||||||
Input.amiibos,
|
|
||||||
Output.amiibos
|
|
||||||
))
|
|
||||||
func getAmiibos(
|
|
||||||
filter: AmiiboFilter,
|
|
||||||
expects numberOfItems: Int
|
|
||||||
) async throws {
|
|
||||||
try await assertAmiibos(
|
|
||||||
with: filter,
|
|
||||||
expects: numberOfItems
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test("get amiibos throws", arguments: zip(
|
|
||||||
Input.amiibosThrows,
|
|
||||||
Output.amiibosThrows
|
|
||||||
))
|
|
||||||
func getAmiibosThrows(
|
|
||||||
filter: AmiiboFilter,
|
|
||||||
expects error: AmiiboServiceError
|
|
||||||
) async throws {
|
|
||||||
try await assertsAmiibosThrows(
|
|
||||||
error: error,
|
|
||||||
when: filter
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test("get amiibo series", arguments: zip(
|
|
||||||
Input.amiiboSeries,
|
|
||||||
Output.amiiboSeries
|
|
||||||
))
|
|
||||||
func getAmiiboSeries(
|
|
||||||
filter: AmiiboSeriesFilter,
|
|
||||||
expects numberOfItems: Int
|
|
||||||
) async throws {
|
|
||||||
try await assertAmiiboSeries(
|
|
||||||
with: filter,
|
|
||||||
expects: numberOfItems
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test("get amiibo series throws", arguments: zip(
|
|
||||||
Input.amiiboSeriesThrows,
|
|
||||||
Output.amiiboSeriesThrows
|
|
||||||
))
|
|
||||||
func getAmiiboSeriesThrows(
|
|
||||||
filter: AmiiboSeriesFilter,
|
|
||||||
expects error: AmiiboServiceError
|
|
||||||
) async throws {
|
|
||||||
try await assertsAmiiboSeriesThrows(
|
|
||||||
error: error,
|
|
||||||
when: filter
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test("get amiibo types", arguments: zip(
|
|
||||||
Input.amiiboTypes,
|
|
||||||
Output.amiiboTypes
|
|
||||||
))
|
|
||||||
func getAmiiboTypes(
|
|
||||||
filter: AmiiboTypeFilter,
|
|
||||||
expects numberOfItems: Int
|
|
||||||
) async throws {
|
|
||||||
try await assertAmiiboTypes(
|
|
||||||
with: filter,
|
|
||||||
expects: numberOfItems
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test("get amiibo types throws", arguments: zip(
|
|
||||||
Input.amiiboTypesThrows,
|
|
||||||
Output.amiiboTypesThrows
|
|
||||||
))
|
|
||||||
func getAmiiboTypesThrows(
|
|
||||||
filter: AmiiboTypeFilter,
|
|
||||||
expects error: AmiiboServiceError
|
|
||||||
) async throws {
|
|
||||||
try await assertsAmiiboTypesThrows(
|
|
||||||
error: error,
|
|
||||||
when: filter
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test("get game characters", arguments: zip(
|
|
||||||
Input.gameCharacters,
|
|
||||||
Output.gameCharacters
|
|
||||||
))
|
|
||||||
func getGameCharacters(
|
|
||||||
filter: GameCharacterFilter,
|
|
||||||
expects numberOfItems: Int
|
|
||||||
) async throws {
|
|
||||||
try await assertGameCharacters(
|
|
||||||
with: filter,
|
|
||||||
expects: numberOfItems
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test("get game characters throws", arguments: zip(
|
|
||||||
Input.gameCharactersThrows,
|
|
||||||
Output.gameCharactersThrows
|
|
||||||
))
|
|
||||||
func getGameCharactersThrows(
|
|
||||||
filter: GameCharacterFilter,
|
|
||||||
expects error: AmiiboServiceError
|
|
||||||
) async throws {
|
|
||||||
try await assertsGameCharactersThrows(
|
|
||||||
error: error,
|
|
||||||
when: filter
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test("get game series", arguments: zip(
|
|
||||||
Input.gameSeries,
|
|
||||||
Output.gameSeries
|
|
||||||
))
|
|
||||||
func getGameSeries(
|
|
||||||
filter: GameSeriesFilter,
|
|
||||||
expects numberOfItems: Int
|
|
||||||
) async throws {
|
|
||||||
try await assertGameSeries(
|
|
||||||
with: filter,
|
|
||||||
expects: numberOfItems
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test("get game series throws", arguments: zip(
|
|
||||||
Input.gameSeriesThrows,
|
|
||||||
Output.gameSeriesThrows
|
|
||||||
))
|
|
||||||
func getGameSeriesThrows(
|
|
||||||
filter: GameSeriesFilter,
|
|
||||||
expects error: AmiiboServiceError
|
|
||||||
) async throws {
|
|
||||||
try await assertsGameSeriesThrows(
|
|
||||||
error: error,
|
|
||||||
when: filter
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test("get last updated timestamp")
|
|
||||||
func getLastUpdated() async throws {
|
|
||||||
try await assertLastUpdated(
|
|
||||||
day: 26,
|
|
||||||
month: 3,
|
|
||||||
year: 2026
|
|
||||||
)
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -342,17 +198,17 @@ private extension AmiiboServiceLiveTests {
|
|||||||
/// Asserts the number of items returned by the `amiibos` endpoint that matched a given filter.
|
/// Asserts the number of items returned by the `amiibos` endpoint that matched a given filter.
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - filter: An amiibo filter type.
|
/// - filter: An amiibo filter type.
|
||||||
/// - numberOfItems: An expected number of items returned.
|
/// - count: An expected count of items to be returned.
|
||||||
func assertAmiibos(
|
func assertAmiibos(
|
||||||
with filter: AmiiboFilter,
|
with filter: AmiiboFilter,
|
||||||
expects numberOfItems: Int
|
expects count: ExpectedCount
|
||||||
) async throws {
|
) async throws {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
// WHEN
|
// WHEN
|
||||||
let amiibos = try await service.getAmiibos(filter)
|
let amiibos = try await service.getAmiibos(filter)
|
||||||
|
|
||||||
// THEN
|
// THEN
|
||||||
#expect(amiibos.count == numberOfItems)
|
assert(amiibos.count, matches: count)
|
||||||
|
|
||||||
guard
|
guard
|
||||||
!amiibos.isEmpty,
|
!amiibos.isEmpty,
|
||||||
@@ -365,8 +221,7 @@ private extension AmiiboServiceLiveTests {
|
|||||||
|
|
||||||
if filter.showUsage == true {
|
if filter.showUsage == true {
|
||||||
#expect(firstAmiiboPlatform.switch.first?.usages?.isEmpty == false)
|
#expect(firstAmiiboPlatform.switch.first?.usages?.isEmpty == false)
|
||||||
// Given the live data is still not returning any Switch 2 games.
|
#expect(firstAmiiboPlatform.switch2.first?.usages?.isEmpty == false)
|
||||||
#expect(firstAmiiboPlatform.switch2.isEmpty == true)
|
|
||||||
#expect(firstAmiiboPlatform.threeDS.first?.usages?.isEmpty == false)
|
#expect(firstAmiiboPlatform.threeDS.first?.usages?.isEmpty == false)
|
||||||
#expect(firstAmiiboPlatform.wiiU.first?.usages?.isEmpty == false)
|
#expect(firstAmiiboPlatform.wiiU.first?.usages?.isEmpty == false)
|
||||||
}
|
}
|
||||||
@@ -391,17 +246,17 @@ private extension AmiiboServiceLiveTests {
|
|||||||
/// Asserts the number of items returned by the `amiiboSeries` endpoint that matched a given filter.
|
/// Asserts the number of items returned by the `amiiboSeries` endpoint that matched a given filter.
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - filter: An amiibo series filter type.
|
/// - filter: An amiibo series filter type.
|
||||||
/// - numberOfItems: An expected number of items returned.
|
/// - count: An expected count of items to be returned.
|
||||||
func assertAmiiboSeries(
|
func assertAmiiboSeries(
|
||||||
with filter: AmiiboSeriesFilter,
|
with filter: AmiiboSeriesFilter,
|
||||||
expects numberOfItems: Int
|
expects count: ExpectedCount
|
||||||
) async throws {
|
) async throws {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
// WHEN
|
// WHEN
|
||||||
let amiiboSeries = try await service.getAmiiboSeries(filter)
|
let amiiboSeries = try await service.getAmiiboSeries(filter)
|
||||||
|
|
||||||
// THEN
|
// THEN
|
||||||
#expect(amiiboSeries.count == numberOfItems)
|
assert(amiiboSeries.count, matches: count)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Asserts the error thrown by the `amiiboSeries` endpoint.
|
/// Asserts the error thrown by the `amiiboSeries` endpoint.
|
||||||
@@ -423,17 +278,17 @@ private extension AmiiboServiceLiveTests {
|
|||||||
/// Asserts the number of items returned by the `amiiboTypes` endpoint that matched a given filter.
|
/// Asserts the number of items returned by the `amiiboTypes` endpoint that matched a given filter.
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - filter: An amiibo type filter type.
|
/// - filter: An amiibo type filter type.
|
||||||
/// - numberOfItems: An expected number of items returned.
|
/// - count: An expected count of items to be returned.
|
||||||
func assertAmiiboTypes(
|
func assertAmiiboTypes(
|
||||||
with filter: AmiiboTypeFilter,
|
with filter: AmiiboTypeFilter,
|
||||||
expects numberOfItems: Int
|
expects count: ExpectedCount
|
||||||
) async throws {
|
) async throws {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
// WHEN
|
// WHEN
|
||||||
let amiiboTypes = try await service.getAmiiboTypes(filter)
|
let amiiboTypes = try await service.getAmiiboTypes(filter)
|
||||||
|
|
||||||
// THEN
|
// THEN
|
||||||
#expect(amiiboTypes.count == numberOfItems)
|
assert(amiiboTypes.count, matches: count)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Asserts the error thrown by the `amiiboTypes` endpoint.
|
/// Asserts the error thrown by the `amiiboTypes` endpoint.
|
||||||
@@ -455,17 +310,17 @@ private extension AmiiboServiceLiveTests {
|
|||||||
/// Asserts the number of items returned by the `gameCharacters` endpoint that matched a given filter.
|
/// Asserts the number of items returned by the `gameCharacters` endpoint that matched a given filter.
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - filter: A game character filter type.
|
/// - filter: A game character filter type.
|
||||||
/// - numberOfItems: An expected number of items returned.
|
/// - count: An expected count of items to be returned.
|
||||||
func assertGameCharacters(
|
func assertGameCharacters(
|
||||||
with filter: GameCharacterFilter,
|
with filter: GameCharacterFilter,
|
||||||
expects numberOfItems: Int
|
expects count: ExpectedCount
|
||||||
) async throws {
|
) async throws {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
// WHEN
|
// WHEN
|
||||||
let gameCharacters = try await service.getGameCharacters(filter)
|
let gameCharacters = try await service.getGameCharacters(filter)
|
||||||
|
|
||||||
// THEN
|
// THEN
|
||||||
#expect(gameCharacters.count == numberOfItems)
|
assert(gameCharacters.count, matches: count)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Asserts the error thrown by the `gameCharacters` endpoint.
|
/// Asserts the error thrown by the `gameCharacters` endpoint.
|
||||||
@@ -487,17 +342,17 @@ private extension AmiiboServiceLiveTests {
|
|||||||
/// Asserts the number of items returned by the `gameSeries` endpoint that matched a given filter.
|
/// Asserts the number of items returned by the `gameSeries` endpoint that matched a given filter.
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - filter: A game series filter type.
|
/// - filter: A game series filter type.
|
||||||
/// - numberOfItems: An expected number of items returned.
|
/// - count: An expected count of items to be returned.
|
||||||
func assertGameSeries(
|
func assertGameSeries(
|
||||||
with filter: GameSeriesFilter,
|
with filter: GameSeriesFilter,
|
||||||
expects numberOfItems: Int
|
expects count: ExpectedCount
|
||||||
) async throws {
|
) async throws {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
// WHEN
|
// WHEN
|
||||||
let gameSeries = try await service.getGameSeries(filter)
|
let gameSeries = try await service.getGameSeries(filter)
|
||||||
|
|
||||||
// THEN
|
// THEN
|
||||||
#expect(gameSeries.count == numberOfItems)
|
assert(gameSeries.count, matches: count)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Asserts the error thrown by the `gameSeries` endpoint.
|
/// Asserts the error thrown by the `gameSeries` endpoint.
|
||||||
@@ -516,31 +371,61 @@ private extension AmiiboServiceLiveTests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Asserts the date returned by the `lastUpdated` endpoint.
|
/// Asserts the date returned by the `lastUpdated` endpoint is within a plausible range.
|
||||||
|
///
|
||||||
|
/// The live service updates its data over time, so this assertion checks the returned date is not before the last known update and not in the future, instead of matching an exact date that would break on every update.
|
||||||
|
///
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - day: A number of day of the last updated date.
|
/// - day: A number of day of the earliest expected last updated date.
|
||||||
/// - month: A number of month of the last updated date.
|
/// - month: A number of month of the earliest expected last updated date.
|
||||||
/// - year: A number of year of the last updated date.
|
/// - year: A number of year of the earliest expected last updated date.
|
||||||
func assertLastUpdated(
|
func assertLastUpdated(
|
||||||
day: Int,
|
onOrAfterDay day: Int,
|
||||||
month: Int,
|
month: Int,
|
||||||
year: Int
|
year: Int
|
||||||
) async throws {
|
) async throws {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
|
var calendar = Calendar(identifier: .gregorian)
|
||||||
|
|
||||||
|
calendar.timeZone = try #require(TimeZone(secondsFromGMT: 0))
|
||||||
|
|
||||||
|
let earliest = try #require(calendar.date(from: .init(
|
||||||
|
year: year,
|
||||||
|
month: month,
|
||||||
|
day: day
|
||||||
|
)))
|
||||||
|
|
||||||
// WHEN
|
// WHEN
|
||||||
let dateLastUpdated = try await service.getLastUpdated()
|
let dateLastUpdated = try await service.getLastUpdated()
|
||||||
|
|
||||||
// THEN
|
// THEN
|
||||||
let dateComponents = Calendar.current.dateComponents(
|
#expect(dateLastUpdated >= earliest)
|
||||||
[.year, .month, .day],
|
#expect(dateLastUpdated <= .now)
|
||||||
from: dateLastUpdated
|
|
||||||
)
|
|
||||||
|
|
||||||
#expect(dateComponents.year == year)
|
|
||||||
#expect(dateComponents.month == month)
|
|
||||||
#expect(dateComponents.day == day)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Asserts an actual number of items matches an expected count.
|
||||||
|
/// - Parameters:
|
||||||
|
/// - actualCount: A number of items returned by an endpoint.
|
||||||
|
/// - expectation: An expected count to match the number of items against.
|
||||||
|
func assert(_ actualCount: Int, matches expectation: ExpectedCount) {
|
||||||
|
switch expectation {
|
||||||
|
case let .exactly(expected):
|
||||||
|
#expect(actualCount == expected)
|
||||||
|
case let .atLeast(minimum):
|
||||||
|
#expect(actualCount >= minimum)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Expectations
|
||||||
|
|
||||||
|
/// An expectation about the number of items returned by an endpoint of the live service.
|
||||||
|
enum ExpectedCount {
|
||||||
|
/// The endpoint is expected to return exactly the associated number of items.
|
||||||
|
case exactly(Int)
|
||||||
|
/// The endpoint is expected to return at least the associated number of items, as the data at the live service grows over time.
|
||||||
|
case atLeast(Int)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Arguments
|
// MARK: - Arguments
|
||||||
@@ -660,24 +545,37 @@ enum Input {
|
|||||||
}
|
}
|
||||||
|
|
||||||
enum Output {
|
enum Output {
|
||||||
/// A list of number of items that are expected from the `assertAmiibos` assertion.
|
/// A list of expected counts from the `assertAmiibos` assertion.
|
||||||
static let amiibos: [Int] = [.totalAmiibos, 7, 7, 1, 1, 1, .zero, .zero, 5, .zero, 7, .totalAmiibos, 247, 247, .zero, .zero, .zero, .zero, 96, 26, .zero, .zero, 63, .totalAmiibos, 13, 6, .zero, .zero, .zero, .totalAmiibos, 51, 32, .zero, .zero, 150, .totalAmiibos, .totalAmiibos, .totalAmiibos]
|
///
|
||||||
|
/// Counts for filters that match a growing set of items are expressed as `atLeast` minimums, so the tests do not break whenever new amiibo items are added to the live service.
|
||||||
|
static let amiibos: [ExpectedCount] = [
|
||||||
|
.atLeast(.minimumAmiibos),
|
||||||
|
.atLeast(7), .atLeast(7),
|
||||||
|
.exactly(1), .atLeast(1),
|
||||||
|
.exactly(1), .exactly(.zero), .exactly(.zero),
|
||||||
|
.atLeast(5), .exactly(.zero), .atLeast(7), .atLeast(.minimumAmiibos),
|
||||||
|
.atLeast(254), .atLeast(254), .exactly(.zero), .exactly(.zero), .exactly(.zero), .exactly(.zero),
|
||||||
|
.atLeast(96), .atLeast(26), .exactly(.zero), .exactly(.zero), .atLeast(63), .atLeast(.minimumAmiibos),
|
||||||
|
.atLeast(14), .atLeast(6), .exactly(.zero), .exactly(.zero), .exactly(.zero), .atLeast(.minimumAmiibos),
|
||||||
|
.atLeast(53), .atLeast(32), .exactly(.zero), .exactly(.zero), .atLeast(152), .atLeast(.minimumAmiibos),
|
||||||
|
.atLeast(.minimumAmiibos), .atLeast(.minimumAmiibos)
|
||||||
|
]
|
||||||
/// A list of errors are expected to be thrown from the `assertAmiibosThrows` assertion.
|
/// A list of errors are expected to be thrown from the `assertAmiibosThrows` assertion.
|
||||||
static let amiibosThrows: [AmiiboServiceError] = [.badRequest, .badRequest, .badRequest, .badRequest, .badRequest, .badRequest, .badRequest]
|
static let amiibosThrows: [AmiiboServiceError] = [.badRequest, .badRequest, .badRequest, .badRequest, .badRequest, .badRequest, .badRequest]
|
||||||
/// A list of number of items that are expected from the `assertAmiiboSeries` assertion.
|
/// A list of expected counts from the `assertAmiiboSeries` assertion.
|
||||||
static let amiiboSeries: [Int] = [.totalAmiiboSeries, 1, 1, 1, .totalAmiiboSeries]
|
static let amiiboSeries: [ExpectedCount] = [.atLeast(.minimumAmiiboSeries), .exactly(1), .exactly(1), .exactly(1), .atLeast(.minimumAmiiboSeries)]
|
||||||
/// A list of errors are expected to be thrown from the `assertAmiiboSeriesThrows` assertion.
|
/// A list of errors are expected to be thrown from the `assertAmiiboSeriesThrows` assertion.
|
||||||
static let amiiboSeriesThrows: [AmiiboServiceError] = [.notFound, .badRequest, .badRequest, .notFound]
|
static let amiiboSeriesThrows: [AmiiboServiceError] = [.notFound, .badRequest, .badRequest, .notFound]
|
||||||
/// A list of number of items that are expected from the `assertAmiiboTypes` assertion.
|
/// A list of expected counts from the `assertAmiiboTypes` assertion.
|
||||||
static let amiiboTypes: [Int] = [.totalAmiiboTypes, 1, 1, 1, .totalAmiiboTypes]
|
static let amiiboTypes: [ExpectedCount] = [.atLeast(.minimumAmiiboTypes), .exactly(1), .exactly(1), .exactly(1), .atLeast(.minimumAmiiboTypes)]
|
||||||
/// A list of errors are expected to be thrown from the `assertAmiiboTypesThrows` assertion.
|
/// A list of errors are expected to be thrown from the `assertAmiiboTypesThrows` assertion.
|
||||||
static let amiiboTypesThrows: [AmiiboServiceError] = [.notFound, .badRequest, .badRequest, .notFound]
|
static let amiiboTypesThrows: [AmiiboServiceError] = [.notFound, .badRequest, .badRequest, .notFound]
|
||||||
/// A list of number of items that are expected from the `assertGameCharacters` assertion.
|
/// A list of expected counts from the `assertGameCharacters` assertion.
|
||||||
static let gameCharacters: [Int] = [.totalGameCharacters, 1, 1, 1, .totalGameCharacters]
|
static let gameCharacters: [ExpectedCount] = [.atLeast(.minimumGameCharacters), .exactly(1), .exactly(1), .exactly(1), .atLeast(.minimumGameCharacters)]
|
||||||
/// A list of errors are expected to be thrown from the `assertGameCharactersThrows` assertion.
|
/// A list of errors are expected to be thrown from the `assertGameCharactersThrows` assertion.
|
||||||
static let gameCharactersThrows: [AmiiboServiceError] = [.notFound, .badRequest, .badRequest, .notFound]
|
static let gameCharactersThrows: [AmiiboServiceError] = [.notFound, .badRequest, .badRequest, .notFound]
|
||||||
/// A list of number of items that are expected from the `assertGameSeries` assertion.
|
/// A list of expected counts from the `assertGameSeries` assertion.
|
||||||
static let gameSeries: [Int] = [.totalGameSeries, 1, 1, 1, .totalGameSeries]
|
static let gameSeries: [ExpectedCount] = [.atLeast(.minimumGameSeries), .exactly(1), .exactly(1), .exactly(1), .atLeast(.minimumGameSeries)]
|
||||||
/// A list of errors are expected to be thrown from the `assertGameSeriesThrows` assertion.
|
/// A list of errors are expected to be thrown from the `assertGameSeriesThrows` assertion.
|
||||||
static let gameSeriesThrows: [AmiiboServiceError] = [.notFound, .badRequest, .badRequest, .notFound]
|
static let gameSeriesThrows: [AmiiboServiceError] = [.notFound, .badRequest, .badRequest, .notFound]
|
||||||
}
|
}
|
||||||
@@ -685,16 +583,16 @@ enum Output {
|
|||||||
// MARK: - Constants
|
// MARK: - Constants
|
||||||
|
|
||||||
private extension Int {
|
private extension Int {
|
||||||
/// A number that represents the total number of amiibo items currently available at the live service.
|
/// A number that represents the minimum number of amiibo items expected from the live service, as of October 2026.
|
||||||
static let totalAmiibos = 939
|
static let minimumAmiibos = 952
|
||||||
/// A number that represents the total number of amiibo series currently available at the live service.
|
/// A number that represents the minimum number of amiibo series expected from the live service, as of October 2026.
|
||||||
static let totalAmiiboSeries = 30
|
static let minimumAmiiboSeries = 32
|
||||||
/// A number that represents the total number of amiibo types currently available at the live service.
|
/// A number that represents the minimum number of amiibo types expected from the live service, as of October 2026.
|
||||||
static let totalAmiiboTypes = 5
|
static let minimumAmiiboTypes = 5
|
||||||
/// A number that represents the total number of game characters currently available at the live service.
|
/// A number that represents the minimum number of game characters expected from the live service, as of October 2026.
|
||||||
static let totalGameCharacters = 680
|
static let minimumGameCharacters = 685
|
||||||
/// A number that represents the total number of game series currently available at the live service.
|
/// A number that represents the minimum number of game series expected from the live service, as of October 2026.
|
||||||
static let totalGameSeries = 117
|
static let minimumGameSeries = 119
|
||||||
}
|
}
|
||||||
|
|
||||||
private extension String {
|
private extension String {
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ struct AmiiboServiceMockTests {
|
|||||||
|
|
||||||
// MARK: Get Amiibos tests
|
// MARK: Get Amiibos tests
|
||||||
|
|
||||||
@Test("returns empty amiibos when mock provides an empty list")
|
@Test
|
||||||
func getAmiibosEmpty() async throws {
|
func `returns empty amiibos when mock provides an empty list`() async throws {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
let service = AmiiboService(client: AmiiboMockClient(amiibos: []))
|
let service = AmiiboService(client: AmiiboMockClient(amiibos: []))
|
||||||
|
|
||||||
@@ -32,9 +32,23 @@ struct AmiiboServiceMockTests {
|
|||||||
// THEN
|
// THEN
|
||||||
#expect(amiibos.isEmpty)
|
#expect(amiibos.isEmpty)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test("throws notFound when mock provides no amiibos")
|
@Test
|
||||||
func getAmiibosNotFound() async {
|
func `returns amiibos when mock provides a list`() async throws {
|
||||||
|
// GIVEN
|
||||||
|
let service = AmiiboService(client: AmiiboMockClient(amiibos: Fixtures.amiibos))
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
let amiibos = try await service.getAmiibos()
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
#expect(amiibos == Fixtures.amiibos)
|
||||||
|
#expect(amiibos.first?.identifier == "0100000000040002")
|
||||||
|
#expect(amiibos.first?.imageURL != nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `throws notFound when mock provides no amiibos`() async {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
let service = AmiiboService(client: AmiiboMockClient())
|
let service = AmiiboService(client: AmiiboMockClient())
|
||||||
|
|
||||||
@@ -45,8 +59,8 @@ struct AmiiboServiceMockTests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test("throws error for amiibos when mock is configured with error", arguments: Errors.all)
|
@Test(arguments: Errors.all)
|
||||||
func getAmiibosThrows(error: AmiiboServiceError) async {
|
func `throws error for amiibos when mock is configured with error`(error: AmiiboServiceError) async {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
let service = AmiiboService(client: AmiiboMockClient(error: error))
|
let service = AmiiboService(client: AmiiboMockClient(error: error))
|
||||||
|
|
||||||
@@ -59,8 +73,8 @@ struct AmiiboServiceMockTests {
|
|||||||
|
|
||||||
// MARK: Get Amiibo Series tests
|
// MARK: Get Amiibo Series tests
|
||||||
|
|
||||||
@Test("returns empty amiibo series when mock provides an empty list")
|
@Test
|
||||||
func getAmiiboSeriesEmpty() async throws {
|
func `returns empty amiibo series when mock provides an empty list`() async throws {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
let service = AmiiboService(client: AmiiboMockClient(amiiboSeries: []))
|
let service = AmiiboService(client: AmiiboMockClient(amiiboSeries: []))
|
||||||
|
|
||||||
@@ -70,9 +84,21 @@ struct AmiiboServiceMockTests {
|
|||||||
// THEN
|
// THEN
|
||||||
#expect(amiiboSeries.isEmpty)
|
#expect(amiiboSeries.isEmpty)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test("throws notFound when mock provides no amiibo series")
|
@Test
|
||||||
func getAmiiboSeriesNotFound() async {
|
func `returns amiibo series when mock provides a list`() async throws {
|
||||||
|
// GIVEN
|
||||||
|
let service = AmiiboService(client: AmiiboMockClient(amiiboSeries: Fixtures.amiiboSeries))
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
let amiiboSeries = try await service.getAmiiboSeries()
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
#expect(amiiboSeries == Fixtures.amiiboSeries)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `throws notFound when mock provides no amiibo series`() async {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
let service = AmiiboService(client: AmiiboMockClient())
|
let service = AmiiboService(client: AmiiboMockClient())
|
||||||
|
|
||||||
@@ -83,8 +109,8 @@ struct AmiiboServiceMockTests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test("throws error for amiibo series when mock is configured with error", arguments: Errors.all)
|
@Test(arguments: Errors.all)
|
||||||
func getAmiiboSeriesThrows(error: AmiiboServiceError) async {
|
func `throws error for amiibo series when mock is configured with error`(error: AmiiboServiceError) async {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
let service = AmiiboService(client: AmiiboMockClient(error: error))
|
let service = AmiiboService(client: AmiiboMockClient(error: error))
|
||||||
|
|
||||||
@@ -97,8 +123,8 @@ struct AmiiboServiceMockTests {
|
|||||||
|
|
||||||
// MARK: Get Amiibo Types tests
|
// MARK: Get Amiibo Types tests
|
||||||
|
|
||||||
@Test("returns empty amiibo types when mock provides an empty list")
|
@Test
|
||||||
func getAmiiboTypesEmpty() async throws {
|
func `returns empty amiibo types when mock provides an empty list`() async throws {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
let service = AmiiboService(client: AmiiboMockClient(amiiboTypes: []))
|
let service = AmiiboService(client: AmiiboMockClient(amiiboTypes: []))
|
||||||
|
|
||||||
@@ -108,9 +134,21 @@ struct AmiiboServiceMockTests {
|
|||||||
// THEN
|
// THEN
|
||||||
#expect(amiiboTypes.isEmpty)
|
#expect(amiiboTypes.isEmpty)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test("throws notFound when mock provides no amiibo types")
|
@Test
|
||||||
func getAmiiboTypesNotFound() async {
|
func `returns amiibo types when mock provides a list`() async throws {
|
||||||
|
// GIVEN
|
||||||
|
let service = AmiiboService(client: AmiiboMockClient(amiiboTypes: Fixtures.amiiboTypes))
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
let amiiboTypes = try await service.getAmiiboTypes()
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
#expect(amiiboTypes == Fixtures.amiiboTypes)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `throws notFound when mock provides no amiibo types`() async {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
let service = AmiiboService(client: AmiiboMockClient())
|
let service = AmiiboService(client: AmiiboMockClient())
|
||||||
|
|
||||||
@@ -121,8 +159,8 @@ struct AmiiboServiceMockTests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test("throws error for amiibo types when mock is configured with error", arguments: Errors.all)
|
@Test(arguments: Errors.all)
|
||||||
func getAmiiboTypesThrows(error: AmiiboServiceError) async {
|
func `throws error for amiibo types when mock is configured with error`(error: AmiiboServiceError) async {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
let service = AmiiboService(client: AmiiboMockClient(error: error))
|
let service = AmiiboService(client: AmiiboMockClient(error: error))
|
||||||
|
|
||||||
@@ -135,8 +173,8 @@ struct AmiiboServiceMockTests {
|
|||||||
|
|
||||||
// MARK: Get Game Characters tests
|
// MARK: Get Game Characters tests
|
||||||
|
|
||||||
@Test("returns empty game characters when mock provides an empty list")
|
@Test
|
||||||
func getGameCharactersEmpty() async throws {
|
func `returns empty game characters when mock provides an empty list`() async throws {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
let service = AmiiboService(client: AmiiboMockClient(gameCharacters: []))
|
let service = AmiiboService(client: AmiiboMockClient(gameCharacters: []))
|
||||||
|
|
||||||
@@ -146,9 +184,21 @@ struct AmiiboServiceMockTests {
|
|||||||
// THEN
|
// THEN
|
||||||
#expect(gameCharacters.isEmpty)
|
#expect(gameCharacters.isEmpty)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test("throws notFound when mock provides no game characters")
|
@Test
|
||||||
func getGameCharactersNotFound() async {
|
func `returns game characters when mock provides a list`() async throws {
|
||||||
|
// GIVEN
|
||||||
|
let service = AmiiboService(client: AmiiboMockClient(gameCharacters: Fixtures.gameCharacters))
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
let gameCharacters = try await service.getGameCharacters()
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
#expect(gameCharacters == Fixtures.gameCharacters)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `throws notFound when mock provides no game characters`() async {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
let service = AmiiboService(client: AmiiboMockClient())
|
let service = AmiiboService(client: AmiiboMockClient())
|
||||||
|
|
||||||
@@ -159,8 +209,8 @@ struct AmiiboServiceMockTests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test("throws error for game characters when mock is configured with error", arguments: Errors.all)
|
@Test(arguments: Errors.all)
|
||||||
func getGameCharactersThrows(error: AmiiboServiceError) async {
|
func `throws error for game characters when mock is configured with error`(error: AmiiboServiceError) async {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
let service = AmiiboService(client: AmiiboMockClient(error: error))
|
let service = AmiiboService(client: AmiiboMockClient(error: error))
|
||||||
|
|
||||||
@@ -173,8 +223,8 @@ struct AmiiboServiceMockTests {
|
|||||||
|
|
||||||
// MARK: Get Game Series tests
|
// MARK: Get Game Series tests
|
||||||
|
|
||||||
@Test("returns empty game series when mock provides an empty list")
|
@Test
|
||||||
func getGameSeriesEmpty() async throws {
|
func `returns empty game series when mock provides an empty list`() async throws {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
let service = AmiiboService(client: AmiiboMockClient(gameSeries: []))
|
let service = AmiiboService(client: AmiiboMockClient(gameSeries: []))
|
||||||
|
|
||||||
@@ -184,9 +234,21 @@ struct AmiiboServiceMockTests {
|
|||||||
// THEN
|
// THEN
|
||||||
#expect(gameSeries.isEmpty)
|
#expect(gameSeries.isEmpty)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test("throws notFound when mock provides no game series")
|
@Test
|
||||||
func getGameSeriesNotFound() async {
|
func `returns game series when mock provides a list`() async throws {
|
||||||
|
// GIVEN
|
||||||
|
let service = AmiiboService(client: AmiiboMockClient(gameSeries: Fixtures.gameSeries))
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
let gameSeries = try await service.getGameSeries()
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
#expect(gameSeries == Fixtures.gameSeries)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
func `throws notFound when mock provides no game series`() async {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
let service = AmiiboService(client: AmiiboMockClient())
|
let service = AmiiboService(client: AmiiboMockClient())
|
||||||
|
|
||||||
@@ -197,8 +259,8 @@ struct AmiiboServiceMockTests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test("throws error for game series when mock is configured with error", arguments: Errors.all)
|
@Test(arguments: Errors.all)
|
||||||
func getGameSeriesThrows(error: AmiiboServiceError) async {
|
func `throws error for game series when mock is configured with error`(error: AmiiboServiceError) async {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
let service = AmiiboService(client: AmiiboMockClient(error: error))
|
let service = AmiiboService(client: AmiiboMockClient(error: error))
|
||||||
|
|
||||||
@@ -211,8 +273,8 @@ struct AmiiboServiceMockTests {
|
|||||||
|
|
||||||
// MARK: Get Last Updated tests
|
// MARK: Get Last Updated tests
|
||||||
|
|
||||||
@Test("returns date when mock provides a last updated date")
|
@Test
|
||||||
func getLastUpdated() async throws {
|
func `returns date when mock provides a last updated date`() async throws {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
let expectedDate = Date(timeIntervalSince1970: 1_700_000_000)
|
let expectedDate = Date(timeIntervalSince1970: 1_700_000_000)
|
||||||
let service = AmiiboService(client: AmiiboMockClient(lastUpdated: expectedDate))
|
let service = AmiiboService(client: AmiiboMockClient(lastUpdated: expectedDate))
|
||||||
@@ -224,8 +286,8 @@ struct AmiiboServiceMockTests {
|
|||||||
#expect(lastUpdated == expectedDate)
|
#expect(lastUpdated == expectedDate)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test("throws notFound when mock provides no last updated date")
|
@Test
|
||||||
func getLastUpdatedNotFound() async {
|
func `throws notFound when mock provides no last updated date`() async {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
let service = AmiiboService(client: AmiiboMockClient())
|
let service = AmiiboService(client: AmiiboMockClient())
|
||||||
|
|
||||||
@@ -236,8 +298,8 @@ struct AmiiboServiceMockTests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test("throws error for last updated when mock is configured with error", arguments: Errors.all)
|
@Test(arguments: Errors.all)
|
||||||
func getLastUpdatedThrows(error: AmiiboServiceError) async {
|
func `throws error for last updated when mock is configured with error`(error: AmiiboServiceError) async {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
let service = AmiiboService(client: AmiiboMockClient(error: error))
|
let service = AmiiboService(client: AmiiboMockClient(error: error))
|
||||||
|
|
||||||
@@ -261,6 +323,6 @@ private enum Errors {
|
|||||||
.notAvailable,
|
.notAvailable,
|
||||||
.notFound,
|
.notFound,
|
||||||
.undocumented(500),
|
.undocumented(500),
|
||||||
.unknown
|
.unknown("An underlying error description.")
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -78,7 +78,6 @@ extension AmiiboMockClient: AmiiboClient {
|
|||||||
|
|
||||||
// MARK: Functions
|
// MARK: Functions
|
||||||
|
|
||||||
#if swift(>=6.0)
|
|
||||||
func getAmiibos(
|
func getAmiibos(
|
||||||
by filter: AmiiboFilter
|
by filter: AmiiboFilter
|
||||||
) async throws(AmiiboServiceError) -> [Amiibo] {
|
) async throws(AmiiboServiceError) -> [Amiibo] {
|
||||||
@@ -110,43 +109,8 @@ extension AmiiboMockClient: AmiiboClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getLastUpdated() async throws(AmiiboServiceError) -> Date {
|
func getLastUpdated() async throws(AmiiboServiceError) -> Date {
|
||||||
fetchLastUpdatedIfAny()
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
func getAmiibos(
|
|
||||||
by filter: AmiiboFilter
|
|
||||||
) async throws -> [Amiibo] {
|
|
||||||
try fetchAmiibosIfAny()
|
|
||||||
}
|
|
||||||
|
|
||||||
func getAmiiboSeries(
|
|
||||||
by filter: AmiiboSeriesFilter
|
|
||||||
) async throws -> [AmiiboSeries] {
|
|
||||||
try fetchAmiiboSeriesIfAny()
|
|
||||||
}
|
|
||||||
|
|
||||||
func getAmiiboTypes(
|
|
||||||
by filter: AmiiboTypeFilter
|
|
||||||
) async throws -> [AmiiboType] {
|
|
||||||
try fetchAmiiboTypesIfAny()
|
|
||||||
}
|
|
||||||
|
|
||||||
func getGameCharacters(
|
|
||||||
by filter: GameCharacterFilter
|
|
||||||
) async throws -> [GameCharacter] {
|
|
||||||
try fetchGameCharactersIfAny()
|
|
||||||
}
|
|
||||||
|
|
||||||
func getGameSeries(
|
|
||||||
by filter: GameSeriesFilter
|
|
||||||
) async throws -> [GameSeries] {
|
|
||||||
try fetchGameSeriesIfAny()
|
|
||||||
}
|
|
||||||
|
|
||||||
func getLastUpdated() async throws -> Date {
|
|
||||||
try fetchLastUpdatedIfAny()
|
try fetchLastUpdatedIfAny()
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -159,7 +123,7 @@ private extension AmiiboMockClient {
|
|||||||
/// Fetches a list of amiibo items, if any.
|
/// Fetches a list of amiibo items, if any.
|
||||||
/// - Returns: A list of amiibo items.
|
/// - Returns: A list of amiibo items.
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case an error has been provided.
|
/// - Throws: An ``AmiiboServiceError`` error in case an error has been provided.
|
||||||
func fetchAmiibosIfAny() throws -> [Amiibo] {
|
func fetchAmiibosIfAny() throws(AmiiboServiceError) -> [Amiibo] {
|
||||||
try throwErrorIfExists()
|
try throwErrorIfExists()
|
||||||
|
|
||||||
guard let amiibos else {
|
guard let amiibos else {
|
||||||
@@ -172,7 +136,7 @@ private extension AmiiboMockClient {
|
|||||||
/// Fetches a list of amiibo series, if any.
|
/// Fetches a list of amiibo series, if any.
|
||||||
/// - Returns: A list of amiibo series.
|
/// - Returns: A list of amiibo series.
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case an error has been provided.
|
/// - Throws: An ``AmiiboServiceError`` error in case an error has been provided.
|
||||||
func fetchAmiiboSeriesIfAny() throws -> [AmiiboSeries] {
|
func fetchAmiiboSeriesIfAny() throws(AmiiboServiceError) -> [AmiiboSeries] {
|
||||||
try throwErrorIfExists()
|
try throwErrorIfExists()
|
||||||
|
|
||||||
guard let amiiboSeries else {
|
guard let amiiboSeries else {
|
||||||
@@ -185,7 +149,7 @@ private extension AmiiboMockClient {
|
|||||||
/// Fetches a list of amiibo types, if any.
|
/// Fetches a list of amiibo types, if any.
|
||||||
/// - Returns: A list of amiibo types.
|
/// - Returns: A list of amiibo types.
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case an error has been provided.
|
/// - Throws: An ``AmiiboServiceError`` error in case an error has been provided.
|
||||||
func fetchAmiiboTypesIfAny() throws -> [AmiiboType] {
|
func fetchAmiiboTypesIfAny() throws(AmiiboServiceError) -> [AmiiboType] {
|
||||||
try throwErrorIfExists()
|
try throwErrorIfExists()
|
||||||
|
|
||||||
guard let amiiboTypes else {
|
guard let amiiboTypes else {
|
||||||
@@ -198,7 +162,7 @@ private extension AmiiboMockClient {
|
|||||||
/// Fetches a list of game characters, if any.
|
/// Fetches a list of game characters, if any.
|
||||||
/// - Returns: A list of game characters.
|
/// - Returns: A list of game characters.
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case an error has been provided.
|
/// - Throws: An ``AmiiboServiceError`` error in case an error has been provided.
|
||||||
func fetchGameCharactersIfAny() throws -> [GameCharacter] {
|
func fetchGameCharactersIfAny() throws(AmiiboServiceError) -> [GameCharacter] {
|
||||||
try throwErrorIfExists()
|
try throwErrorIfExists()
|
||||||
|
|
||||||
guard let gameCharacters else {
|
guard let gameCharacters else {
|
||||||
@@ -211,7 +175,7 @@ private extension AmiiboMockClient {
|
|||||||
/// Fetches a list of game series, if any.
|
/// Fetches a list of game series, if any.
|
||||||
/// - Returns: A list of game series, if any.
|
/// - Returns: A list of game series, if any.
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case an error has been provided.
|
/// - Throws: An ``AmiiboServiceError`` error in case an error has been provided.
|
||||||
func fetchGameSeriesIfAny() throws -> [GameSeries] {
|
func fetchGameSeriesIfAny() throws(AmiiboServiceError) -> [GameSeries] {
|
||||||
try throwErrorIfExists()
|
try throwErrorIfExists()
|
||||||
|
|
||||||
guard let gameSeries else {
|
guard let gameSeries else {
|
||||||
@@ -224,7 +188,7 @@ private extension AmiiboMockClient {
|
|||||||
/// Fetches a last updated date, if any.
|
/// Fetches a last updated date, if any.
|
||||||
/// - Returns: A last updated date.
|
/// - Returns: A last updated date.
|
||||||
/// - Throws: An ``AmiiboServiceError`` error in case an error has been provided.
|
/// - Throws: An ``AmiiboServiceError`` error in case an error has been provided.
|
||||||
func fetchLastUpdatedIfAny() throws -> Date {
|
func fetchLastUpdatedIfAny() throws(AmiiboServiceError) -> Date {
|
||||||
try throwErrorIfExists()
|
try throwErrorIfExists()
|
||||||
|
|
||||||
guard let lastUpdated else {
|
guard let lastUpdated else {
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
// ===----------------------------------------------------------------------===
|
||||||
|
//
|
||||||
|
// This source file is part of the Amiibo Service open source project
|
||||||
|
//
|
||||||
|
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
|
||||||
|
// Licensed under Apache license v2.0
|
||||||
|
//
|
||||||
|
// See LICENSE for license information
|
||||||
|
// See CONTRIBUTORS for the list of Amiibo Service project authors
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
//
|
||||||
|
// ===----------------------------------------------------------------------===
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
extension Date {
|
||||||
|
|
||||||
|
// MARK: Functions
|
||||||
|
|
||||||
|
/// Makes a date from UTC components.
|
||||||
|
static func utc(
|
||||||
|
_ year: Int,
|
||||||
|
_ month: Int,
|
||||||
|
_ day: Int,
|
||||||
|
_ hour: Int = 0,
|
||||||
|
_ minute: Int = 0,
|
||||||
|
_ second: Int = 0
|
||||||
|
) -> Date {
|
||||||
|
var calendar = Calendar(identifier: .gregorian)
|
||||||
|
|
||||||
|
calendar.timeZone = .init(secondsFromGMT: 0)!
|
||||||
|
|
||||||
|
return calendar.date(from: .init(
|
||||||
|
year: year,
|
||||||
|
month: month,
|
||||||
|
day: day,
|
||||||
|
hour: hour,
|
||||||
|
minute: minute,
|
||||||
|
second: second
|
||||||
|
))!
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
// ===----------------------------------------------------------------------===
|
||||||
|
//
|
||||||
|
// This source file is part of the Amiibo Service open source project
|
||||||
|
//
|
||||||
|
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
|
||||||
|
// Licensed under Apache license v2.0
|
||||||
|
//
|
||||||
|
// See LICENSE for license information
|
||||||
|
// See CONTRIBUTORS for the list of Amiibo Service project authors
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
//
|
||||||
|
// ===----------------------------------------------------------------------===
|
||||||
|
|
||||||
|
import AmiiboService
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
/// Ready-made models for testing purposes.
|
||||||
|
enum Fixtures {
|
||||||
|
/// Amiibo items; the first one has release dates and related games with usages.
|
||||||
|
static let amiibos: [Amiibo] = [
|
||||||
|
.init(
|
||||||
|
head: "01000000",
|
||||||
|
tail: "00040002",
|
||||||
|
name: "Zelda",
|
||||||
|
type: "Figure",
|
||||||
|
series: "Super Smash Bros.",
|
||||||
|
gameCharacter: "Zelda",
|
||||||
|
gameSeries: "The Legend of Zelda",
|
||||||
|
image: "https://raw.githubusercontent.com/N3evin/AmiiboAPI/master/images/icon_01000000-00040002.png",
|
||||||
|
release: .init(
|
||||||
|
america: Date(timeIntervalSince1970: 1_416_441_600),
|
||||||
|
australia: Date(timeIntervalSince1970: 1_417_564_800),
|
||||||
|
europe: Date(timeIntervalSince1970: 1_417_132_800),
|
||||||
|
japan: Date(timeIntervalSince1970: 1_417_564_800)
|
||||||
|
),
|
||||||
|
platform: .init(
|
||||||
|
switch: [
|
||||||
|
.init(
|
||||||
|
identifiers: ["01007EF00011E000"],
|
||||||
|
name: "The Legend of Zelda: Breath of the Wild",
|
||||||
|
usages: [.init(explanation: "Spawns a random selection of items.", isWriteable: false)]
|
||||||
|
)
|
||||||
|
],
|
||||||
|
wiiU: [
|
||||||
|
.init(
|
||||||
|
identifiers: ["0005000010145000"],
|
||||||
|
name: "Super Smash Bros. for Wii U",
|
||||||
|
usages: [.init(explanation: "Unlocks a figure player.", isWriteable: true)]
|
||||||
|
)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
),
|
||||||
|
.init(
|
||||||
|
head: "00000000",
|
||||||
|
tail: "00000002",
|
||||||
|
name: "Mario",
|
||||||
|
type: "Figure",
|
||||||
|
series: "Super Smash Bros.",
|
||||||
|
gameCharacter: "Mario",
|
||||||
|
gameSeries: "Super Mario",
|
||||||
|
image: "https://raw.githubusercontent.com/N3evin/AmiiboAPI/master/images/icon_00000000-00000002.png"
|
||||||
|
)
|
||||||
|
]
|
||||||
|
/// Amiibo series.
|
||||||
|
static let amiiboSeries: [AmiiboSeries] = [
|
||||||
|
.init(key: "0x00", name: "Super Smash Bros."),
|
||||||
|
.init(key: "0x01", name: "Super Mario")
|
||||||
|
]
|
||||||
|
/// Amiibo types.
|
||||||
|
static let amiiboTypes: [AmiiboType] = [
|
||||||
|
.init(key: "0x00", name: "Figure"),
|
||||||
|
.init(key: "0x01", name: "Card")
|
||||||
|
]
|
||||||
|
/// Game characters.
|
||||||
|
static let gameCharacters: [GameCharacter] = [
|
||||||
|
.init(key: "0x0000", name: "Mario"),
|
||||||
|
.init(key: "0x0100", name: "Zelda")
|
||||||
|
]
|
||||||
|
/// Game series.
|
||||||
|
static let gameSeries: [GameSeries] = [
|
||||||
|
.init(key: "0x000", name: "Super Mario"),
|
||||||
|
.init(key: "0x010", name: "The Legend of Zelda")
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
// ===----------------------------------------------------------------------===
|
||||||
|
//
|
||||||
|
// This source file is part of the Amiibo Service open source project
|
||||||
|
//
|
||||||
|
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
|
||||||
|
// Licensed under Apache license v2.0
|
||||||
|
//
|
||||||
|
// See LICENSE for license information
|
||||||
|
// See CONTRIBUTORS for the list of Amiibo Service project authors
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
//
|
||||||
|
// ===----------------------------------------------------------------------===
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import HTTPTypes
|
||||||
|
import OpenAPIRuntime
|
||||||
|
|
||||||
|
/// A transport that answers every request with a canned response, for testing purposes.
|
||||||
|
struct StubTransport: ClientTransport {
|
||||||
|
|
||||||
|
// MARK: Type aliases
|
||||||
|
|
||||||
|
/// A closure that builds the response for a request.
|
||||||
|
typealias Handler = @Sendable (HTTPRequest) throws -> (HTTPResponse, HTTPBody?)
|
||||||
|
|
||||||
|
// MARK: Properties
|
||||||
|
|
||||||
|
/// The handler that builds the response.
|
||||||
|
private let handler: Handler
|
||||||
|
|
||||||
|
// MARK: Initializers
|
||||||
|
|
||||||
|
/// Initializes this transport with a response handler.
|
||||||
|
init(handler: @escaping Handler) {
|
||||||
|
self.handler = handler
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Initializes this transport with a fixed response.
|
||||||
|
init(status: HTTPResponse.Status, json: String? = nil) {
|
||||||
|
self.init { _ in
|
||||||
|
Self.response(status: status, json: json)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: Functions
|
||||||
|
|
||||||
|
func send(
|
||||||
|
_ request: HTTPRequest,
|
||||||
|
body: HTTPBody?,
|
||||||
|
baseURL: URL,
|
||||||
|
operationID: String
|
||||||
|
) async throws -> (HTTPResponse, HTTPBody?) {
|
||||||
|
try handler(request)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Builds a response with a status and an optional JSON body.
|
||||||
|
static func response(
|
||||||
|
status: HTTPResponse.Status,
|
||||||
|
json: String? = nil
|
||||||
|
) -> (HTTPResponse, HTTPBody?) {
|
||||||
|
guard let json else {
|
||||||
|
return (.init(status: status), nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
.init(status: status, headerFields: [.contentType: "application/json"]),
|
||||||
|
.init(json)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
// ===----------------------------------------------------------------------===
|
||||||
|
//
|
||||||
|
// This source file is part of the Amiibo Service open source project
|
||||||
|
//
|
||||||
|
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
|
||||||
|
// Licensed under Apache license v2.0
|
||||||
|
//
|
||||||
|
// See LICENSE for license information
|
||||||
|
// See CONTRIBUTORS for the list of Amiibo Service project authors
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
//
|
||||||
|
// ===----------------------------------------------------------------------===
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import HTTPTypes
|
||||||
|
import OpenAPIRuntime
|
||||||
|
|
||||||
|
/// A transport that throws a given error instead of sending the request, for testing purposes.
|
||||||
|
///
|
||||||
|
/// The error reaches the live client wrapped in a `ClientError`, as it would from a real transport.
|
||||||
|
struct ThrowingTransport: ClientTransport {
|
||||||
|
|
||||||
|
// MARK: Properties
|
||||||
|
|
||||||
|
/// The error to throw.
|
||||||
|
private let error: any Error
|
||||||
|
|
||||||
|
// MARK: Initializers
|
||||||
|
|
||||||
|
/// Initializes this transport.
|
||||||
|
/// - Parameter error: An error to throw.
|
||||||
|
init(error: any Error) {
|
||||||
|
self.error = error
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: Functions
|
||||||
|
|
||||||
|
func send(
|
||||||
|
_ request: HTTPRequest,
|
||||||
|
body: HTTPBody?,
|
||||||
|
baseURL: URL,
|
||||||
|
operationID: String
|
||||||
|
) async throws -> (HTTPResponse, HTTPBody?) {
|
||||||
|
throw error
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
/*!
|
|
||||||
* This source file is part of the Swift.org open source project
|
|
||||||
*
|
|
||||||
* Copyright (c) 2021 Apple Inc. and the Swift project authors
|
|
||||||
* Licensed under Apache License v2.0 with Runtime Library Exception
|
|
||||||
*
|
|
||||||
* See https://swift.org/LICENSE.txt for license information
|
|
||||||
* See https://swift.org/CONTRIBUTORS.txt for Swift project authors
|
|
||||||
*/.badge[data-v-ffe39a30]{--badge-color:var(--color-badge-default);--badge-dark-color:var(--color-badge-dark-default);font-size:.7058823529rem;line-height:1.3333333333;font-weight:400;font-family:var(--typography-html-font,"Helvetica Neue","Helvetica","Arial",sans-serif);display:inline-block;padding:2px 4px;white-space:nowrap;border-radius:var(--badge-border-radius,1px);border-style:var(--badge-border-style,none);border-width:var(--badge-border-width,1px);margin:auto;margin-inline-start:5px;color:var(--colors-badge-text,var(--color-badge-text));background-color:var(--badge-color)}@media screen{[data-color-scheme=dark] .badge[data-v-ffe39a30]{background-color:var(--badge-dark-color)}}@media screen and (prefers-color-scheme:dark){[data-color-scheme=auto] .badge[data-v-ffe39a30]{background-color:var(--badge-dark-color)}}.badge-deprecated[data-v-ffe39a30]{--badge-color:var(--color-badge-deprecated);--badge-dark-color:var(--color-badge-dark-deprecated)}.badge-beta[data-v-ffe39a30]{--badge-color:var(--color-badge-beta);--badge-dark-color:var(--color-badge-dark-beta)}[data-v-3a32ffd0] .code-listing{background:var(--background,var(--color-code-background));color:var(--text,var(--color-code-plain));border-color:var(--colors-grid,var(--color-grid));border-width:var(--code-border-width,1px);border-style:var(--code-border-style,solid)}[data-v-3a32ffd0] .code-listing pre{padding:var(--code-block-style-elements-padding)}[data-v-3a32ffd0] .code-listing pre>code{font-size:.8823529412rem;line-height:1.6666666667;font-weight:400;font-family:var(--typography-html-font-mono,Menlo,monospace)}[data-v-3a32ffd0] *+.code-listing,[data-v-3a32ffd0] *+.endpoint-example,[data-v-3a32ffd0] *+.inline-image-container,[data-v-3a32ffd0] *+aside,[data-v-3a32ffd0] *+figure,[data-v-3a32ffd0] .code-listing+*,[data-v-3a32ffd0] .endpoint-example+*,[data-v-3a32ffd0] .inline-image-container+*,[data-v-3a32ffd0] aside+*,[data-v-3a32ffd0] figure+*{margin-top:var(--spacing-stacked-margin-xlarge)}[data-v-3a32ffd0] *+dl,[data-v-3a32ffd0] dl+*{margin-top:var(--spacing-stacked-margin-large)}[data-v-3a32ffd0] img{display:block;margin:auto;max-width:100%}[data-v-3a32ffd0] ol,[data-v-3a32ffd0] ol li:not(:first-child),[data-v-3a32ffd0] ul,[data-v-3a32ffd0] ul li:not(:first-child){margin-top:var(--spacing-stacked-margin-large)}@media only screen and (max-width:735px){[data-v-3a32ffd0] ol,[data-v-3a32ffd0] ul{margin-left:1.25rem}}[data-v-3a32ffd0] dt:not(:first-child){margin-top:var(--spacing-stacked-margin-large)}[data-v-3a32ffd0] dd{margin-left:2em}.topic-icon-wrapper[data-v-58794252]{display:flex;align-items:center;justify-content:center;height:1.4705882353rem;flex:0 0 1.294rem;width:1.294rem;margin-inline-end:1rem}.topic-icon[data-v-58794252]{height:.8823529412rem;transform:scale(1);-webkit-transform:scale(1);overflow:visible}.topic-icon[data-v-58794252] img{margin:0;display:block;width:100%;height:100%;-o-object-fit:contain;object-fit:contain}.topic-icon.curly-brackets-icon[data-v-58794252]{height:1rem}.token-method[data-v-295ad0ff]{font-weight:700}.token-keyword[data-v-295ad0ff]{color:var(--syntax-keyword,var(--color-syntax-keywords))}.token-number[data-v-295ad0ff]{color:var(--syntax-number,var(--color-syntax-numbers))}.token-string[data-v-295ad0ff]{color:var(--syntax-string,var(--color-syntax-strings))}.attribute-link[data-v-295ad0ff],.token-attribute[data-v-295ad0ff]{color:var(--syntax-attribute,var(--color-syntax-keywords))}.token-internalParam[data-v-295ad0ff]{color:var(--color-syntax-param-internal-name)}.type-identifier-link[data-v-295ad0ff]{color:var(--syntax-type,var(--color-syntax-other-type-names))}.token-removed[data-v-295ad0ff]{background-color:var(--color-highlight-red)}.token-added[data-v-295ad0ff]{background-color:var(--color-highlight-green)}.decorated-title[data-v-2d744be4]{direction:ltr}.decorator[data-v-2d744be4],.label[data-v-2d744be4]{color:var(--colors-secondary-label,var(--color-secondary-label))}.label[data-v-2d744be4]{font-size:1rem;line-height:1.4705882353;font-weight:400;font-family:var(--typography-html-font,"Helvetica Neue","Helvetica","Arial",sans-serif)}.empty-token[data-v-2d744be4]{font-size:0}.empty-token[data-v-2d744be4]:after{content:" ";font-size:1rem}.abstract[data-v-e1f11a1a],.link-block[data-v-e1f11a1a] .badge{margin-inline-start:2.294rem}.link-block .badge+.badge[data-v-e1f11a1a]{margin-inline-start:1rem}.link[data-v-e1f11a1a]{display:flex}.link-block .badge[data-v-e1f11a1a]{margin-top:.5rem}.link-block.has-inline-element[data-v-e1f11a1a]{display:flex;align-items:flex-start;flex-flow:row wrap}.link-block.has-inline-element .badge[data-v-e1f11a1a]{margin-inline-start:1rem;margin-top:0}.link-block .has-adjacent-elements[data-v-e1f11a1a]{padding-top:5px;padding-bottom:5px;display:inline-flex}.link-block[data-v-e1f11a1a],.link[data-v-e1f11a1a]{box-sizing:inherit}.link-block.changed[data-v-e1f11a1a],.link.changed[data-v-e1f11a1a]{padding-right:1rem;padding-left:2.1764705882rem;padding-top:8px;padding-bottom:8px;display:Line truncated
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
/*!
|
|
||||||
* This source file is part of the Swift.org open source project
|
|
||||||
*
|
|
||||||
* Copyright (c) 2021 Apple Inc. and the Swift project authors
|
|
||||||
* Licensed under Apache License v2.0 with Runtime Library Exception
|
|
||||||
*
|
|
||||||
* See https://swift.org/LICENSE.txt for license information
|
|
||||||
* See https://swift.org/CONTRIBUTORS.txt for Swift project authors
|
|
||||||
*/aside[data-v-50d24223]{-moz-column-break-inside:avoid;break-inside:avoid;border-radius:var(--aside-border-radius,var(--border-radius,4px));border-style:var(--aside-border-style,solid);border-block-width:var(--aside-border-width-block,0);border-inline-width:var(--aside-border-width-inline,6px 0);padding:.9411764706rem;text-align:start}aside .label[data-v-50d24223]{font-size:1rem;line-height:1.5294117647;font-weight:600;font-family:var(--typography-html-font,"Helvetica Neue","Helvetica","Arial",sans-serif)}aside .label+[data-v-50d24223]{margin-top:var(--spacing-stacked-margin-small)}aside.deprecated[data-v-50d24223]{background-color:var(--color-aside-deprecated-background);border-color:var(--color-aside-deprecated-border);box-shadow:0 0 0 0 var(--color-aside-deprecated-border) inset,0 0 0 0 var(--color-aside-deprecated-border)}aside.deprecated .label[data-v-50d24223]{color:var(--color-aside-deprecated)}aside.experiment[data-v-50d24223]{background-color:var(--color-aside-experiment-background);border-color:var(--color-aside-experiment-border);box-shadow:0 0 0 0 var(--color-aside-experiment-border) inset,0 0 0 0 var(--color-aside-experiment-border)}aside.experiment .label[data-v-50d24223]{color:var(--color-aside-experiment)}aside.important[data-v-50d24223]{background-color:var(--color-aside-important-background);border-color:var(--color-aside-important-border);box-shadow:0 0 0 0 var(--color-aside-important-border) inset,0 0 0 0 var(--color-aside-important-border)}aside.important .label[data-v-50d24223]{color:var(--color-aside-important)}aside.note[data-v-50d24223]{background-color:var(--color-aside-note-background);border-color:var(--color-aside-note-border);box-shadow:0 0 0 0 var(--color-aside-note-border) inset,0 0 0 0 var(--color-aside-note-border)}aside.note .label[data-v-50d24223]{color:var(--color-aside-note)}aside.tip[data-v-50d24223]{background-color:var(--color-aside-tip-background);border-color:var(--color-aside-tip-border);box-shadow:0 0 0 0 var(--color-aside-tip-border) inset,0 0 0 0 var(--color-aside-tip-border)}aside.tip .label[data-v-50d24223]{color:var(--color-aside-tip)}aside.warning[data-v-50d24223]{background-color:var(--color-aside-warning-background);border-color:var(--color-aside-warning-border);box-shadow:0 0 0 0 var(--color-aside-warning-border) inset,0 0 0 0 var(--color-aside-warning-border)}aside.warning .label[data-v-50d24223]{color:var(--color-aside-warning)}code[data-v-c21375ec]{direction:ltr}code[data-v-c21375ec]:before{content:attr(data-before-code)}code[data-v-c21375ec]:after{content:attr(data-after-code)}code[data-v-c21375ec]:after,code[data-v-c21375ec]:before{display:block;position:absolute;clip:rect(1px,1px,1px,1px);clip-path:inset(0 0 99.9% 99.9%);overflow:hidden;height:1px;width:1px;padding:0;border:0}.CopyIcon[data-v-5308ccb8]{opacity:.8}.CheckmarkIcon[data-v-4c718f32],.CrossIcon[data-v-27a90ea3]{opacity:1;stroke:currentColor}.swift-file-icon.file-icon[data-v-c01a6890]{height:1rem}.file-icon[data-v-7c381064]{position:relative;align-items:flex-end;height:24px;margin:0 .5rem 0 1rem}.filename[data-v-c8c40662]{color:var(--text,var(--colors-secondary-label,var(--color-secondary-label)));font-size:.9411764706rem;line-height:1.1875;font-weight:400;font-family:var(--typography-html-font,"Helvetica Neue","Helvetica","Arial",sans-serif);margin-top:1rem}@media only screen and (max-width:735px){.filename[data-v-c8c40662]{font-size:.8235294118rem;line-height:1.4285714286;font-weight:400;font-family:var(--typography-html-font,"Helvetica Neue","Helvetica","Arial",sans-serif);margin-top:0}}.filename>a[data-v-c8c40662],.filename>span[data-v-c8c40662]{display:flex;align-items:center;line-height:normal}a[data-v-c8c40662]{color:var(--url,var(--color-link))}.code-line-container[data-v-28c1cdd6]{display:inline-block;width:100%;box-sizing:border-box}.code-number[data-v-28c1cdd6]{display:inline-block;padding:0 1rem 0 8px;text-align:right;min-width:2em;color:#666;-webkit-user-select:none;-moz-user-select:none;user-select:none}.code-number[data-v-28c1cdd6]:before{content:attr(data-line-number)}.code-listing:not(:has(.code-number)):has(.highlighted) .code-line-container[data-v-28c1cdd6]{padding-left:8px;border-left:4px solid transparent}.code-listing:not(:has(.code-number)):has(.highlighted) .highlighted[data-v-28c1cdd6]{border-left-color:var(--color-code-line-highlight-border)}.highlighted[data-v-28c1cdd6]{background:var(--line-highlight,var(--color-code-line-highlight))}.highlighted .code-number[data-v-28c1cdd6]{border-left:4px solid var(--color-code-line-highlight-border);padding-left:4px}.strikethrough[data-v-28c1cdd6]{text-decoration-line:line-through;text-decoration-color:var(--color-figure-gray);opacity:.85}pre[data-v-28c1cdd6]{padding:14px 0;display:flex;overflow:unset;-webkit-overflow-scrolling:touch;white-space:pre;word-wrap:normal;height:100%;-moz-tab-size:var(--code-indentationWidth,4);-o-tab-size:var(--code-indentationWidth,4);tab-size:var(--code-indentationWidth,4)}@media only screeLine truncated
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
/*!
|
|
||||||
* This source file is part of the Swift.org open source project
|
|
||||||
*
|
|
||||||
* Copyright (c) 2021 Apple Inc. and the Swift project authors
|
|
||||||
* Licensed under Apache License v2.0 with Runtime Library Exception
|
|
||||||
*
|
|
||||||
* See https://swift.org/LICENSE.txt for license information
|
|
||||||
* See https://swift.org/CONTRIBUTORS.txt for Swift project authors
|
|
||||||
*/.betainfo[data-v-ba3b3cc0]{font-size:.9411764706rem;padding:3rem 0;background-color:var(--color-fill-secondary)}.full-width-container .betainfo-container[data-v-ba3b3cc0]{max-width:820px;margin-left:auto;margin-right:auto;padding-left:80px;padding-right:80px;box-sizing:border-box}@media print{.full-width-container .betainfo-container[data-v-ba3b3cc0]{padding-left:20px;padding-right:20px;max-width:none}}@media only screen and (min-width:1251px){.full-width-container .betainfo-container[data-v-ba3b3cc0]{max-width:980px}}@media only screen and (min-width:1500px){.full-width-container .betainfo-container[data-v-ba3b3cc0]{max-width:1080px}}@media only screen and (max-width:735px){.full-width-container .betainfo-container[data-v-ba3b3cc0]{width:auto;padding-left:20px;padding-right:20px}}.static-width-container .betainfo-container[data-v-ba3b3cc0]{margin-left:auto;margin-right:auto;width:1536px;width:980px}@media only screen and (max-width:1250px){.static-width-container .betainfo-container[data-v-ba3b3cc0]{width:692px}}@media only screen and (max-width:735px){.static-width-container .betainfo-container[data-v-ba3b3cc0]{width:87.5%}}@media only screen and (max-width:320px){.static-width-container .betainfo-container[data-v-ba3b3cc0]{width:215px}}.betainfo-label[data-v-ba3b3cc0]{font-weight:600;font-size:.9411764706rem}.betainfo-content[data-v-ba3b3cc0] p{margin-bottom:10px}a[data-v-2ca5e993]{text-decoration:underline;color:inherit;font-weight:600}.summary-section[data-v-3aa6f694]:last-of-type{margin-right:0}@media only screen and (max-width:735px){.summary-section[data-v-3aa6f694]{margin-right:0}}.title[data-v-246c819c]{color:var(--colors-text,var(--color-text));font-size:.8235294118rem;margin-right:.5rem;text-rendering:optimizeLegibility}.language[data-v-0e39c0ba]{padding-bottom:10px;justify-content:flex-end}.language-list[data-v-0e39c0ba],.language[data-v-0e39c0ba]{font-size:.8235294118rem;line-height:1.4285714286;font-weight:400;font-family:var(--typography-html-font,"Helvetica Neue","Helvetica","Arial",sans-serif);margin-top:0;display:flex;align-items:center}.language-option.swift[data-v-0e39c0ba]{padding-right:10px;border-right:1px solid var(--colors-secondary-label,var(--color-secondary-label))}.language-option.objc[data-v-0e39c0ba]{padding-left:10px}.view-more-link[data-v-3f54e653]{font-size:.8235294118rem;line-height:1.2857142857;font-weight:400;font-family:var(--typography-html-font,"Helvetica Neue","Helvetica","Arial",sans-serif);display:flex;flex-flow:row-reverse;margin-bottom:1.3rem}.documentation-hero[data-v-0958f035]{color:var(--color-documentation-intro-figure,var(--color-figure-gray));overflow:hidden;position:relative;padding-inline-end:var(--doc-hero-right-offset)}.documentation-hero[data-v-0958f035]:before{content:"";background:var(--standard-accent-color,var(--color-documentation-intro-fill,var(--color-fill-tertiary)));position:absolute;width:100%;height:100%}.documentation-hero[data-v-0958f035]:after{background:transparent;opacity:.85;width:100%;position:absolute;content:"";height:100%;inset-inline-start:0;top:0}@media screen{[data-color-scheme=dark] .documentation-hero[data-v-0958f035]:after{opacity:.55}}@media screen and (prefers-color-scheme:dark){[data-color-scheme=auto] .documentation-hero[data-v-0958f035]:after{opacity:.55}}.documentation-hero .icon[data-v-0958f035]{position:absolute;margin-top:10px;margin-inline-end:25px;inset-inline-end:0;width:250px;height:calc(100% - 20px);box-sizing:border-box}@media only screen and (max-width:735px){.documentation-hero .icon[data-v-0958f035]{display:none}}.documentation-hero .background-icon[data-v-0958f035]{color:var(--color-documentation-intro-accent,var(--color-figure-gray-secondary));display:block;width:250px;height:auto;opacity:.15;mix-blend-mode:normal;position:absolute;top:50%;inset-inline-start:0;transform:translateY(-50%);max-height:100%}.documentation-hero .background-icon[data-v-0958f035] img,.documentation-hero .background-icon[data-v-0958f035] svg{width:100%;height:100%}@media screen{[data-color-scheme=dark] .documentation-hero .background-icon[data-v-0958f035]{mix-blend-mode:normal;opacity:.15}}@media screen and (prefers-color-scheme:dark){[data-color-scheme=auto] .documentation-hero .background-icon[data-v-0958f035]{mix-blend-mode:normal;opacity:.15}}.documentation-hero__content[data-v-0958f035]:not(.minimized-hero){padding-top:2.3529411765rem;padding-bottom:2.3529411765rem;position:relative;z-index:1}.full-width-container .documentation-hero__content[data-v-0958f035]:not(.minimized-hero){max-width:820px;margin-left:auto;margin-right:auto;padding-left:80px;padding-right:80px;box-sizing:border-box}@media print{.full-width-container .documentation-hero__content[data-v-0958f035]:not(.minimized-hero){padding-left:20px;padding-right:20px;max-width:none}}@media only screen and (min-width:1251px){.full-width-container .documentation-hero__content[data-v-0958f035]:not(.minimized-hero){max-width:980px}}@media only screen and (min-width:150Line truncated
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
/*!
|
|
||||||
* This source file is part of the Swift.org open source project
|
|
||||||
*
|
|
||||||
* Copyright (c) 2021 Apple Inc. and the Swift project authors
|
|
||||||
* Licensed under Apache License v2.0 with Runtime Library Exception
|
|
||||||
*
|
|
||||||
* See https://swift.org/LICENSE.txt for license information
|
|
||||||
* See https://swift.org/CONTRIBUTORS.txt for Swift project authors
|
|
||||||
*/.color-scheme-toggle[data-v-0c0360ce]{--toggle-color-fill:var(--color-button-background);--toggle-color-text:var(--color-fill-blue);font-size:.7058823529rem;line-height:1.3333333333;font-weight:400;font-family:var(--typography-html-font,"Helvetica Neue","Helvetica","Arial",sans-serif);border:1px solid var(--toggle-color-fill);border-radius:var(--toggle-border-radius-outer,var(--border-radius,4px));display:inline-flex;padding:1px}@media screen{[data-color-scheme=dark] .color-scheme-toggle[data-v-0c0360ce]{--toggle-color-text:var(--color-figure-blue)}}@media screen and (prefers-color-scheme:dark){[data-color-scheme=auto] .color-scheme-toggle[data-v-0c0360ce]{--toggle-color-text:var(--color-figure-blue)}}@media print{.color-scheme-toggle[data-v-0c0360ce]{display:none}}:root.no-js .color-scheme-toggle[data-v-0c0360ce]{visibility:hidden}input[data-v-0c0360ce]{position:absolute;clip:rect(1px,1px,1px,1px);clip-path:inset(0 0 99.9% 99.9%);overflow:hidden;height:1px;width:1px;padding:0;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.fromkeyboard label[data-v-0c0360ce]:focus-within{outline:4px solid var(--color-focus-color);outline-offset:1px}.text[data-v-0c0360ce]{border:1px solid transparent;border-radius:var(--toggle-border-radius-inner,2px);color:var(--toggle-color-text);display:inline-block;text-align:center;padding:1px 6px;min-width:42px;box-sizing:border-box}.text[data-v-0c0360ce]:hover{cursor:pointer}input:checked+.text[data-v-0c0360ce]{--toggle-color-text:var(--color-button-text);background:var(--toggle-color-fill);border-color:var(--toggle-color-fill)}.footer[data-v-f1d65b2a]{border-top:1px solid var(--color-grid)}.row[data-v-f1d65b2a]{margin-left:auto;margin-right:auto;width:1536px;width:980px;display:flex;flex-direction:row-reverse;margin:20px auto}@media only screen and (max-width:1250px){.row[data-v-f1d65b2a]{width:692px}}@media only screen and (max-width:735px){.row[data-v-f1d65b2a]{width:87.5%}}@media only screen and (max-width:320px){.row[data-v-f1d65b2a]{width:215px}}@media only screen and (max-width:735px){.row[data-v-f1d65b2a]{width:100%;padding:0 .9411764706rem;box-sizing:border-box}}.InitialLoadingPlaceholder[data-v-35c356b6]{background:var(--colors-loading-placeholder-background,var(--color-loading-placeholder-background));height:100vh;width:100%}.svg-icon[data-v-06e5463e]{fill:var(--colors-svg-icon-fill-light,var(--color-svg-icon));transform:scale(1);-webkit-transform:scale(1);overflow:visible}.theme-dark .svg-icon[data-v-06e5463e]{fill:var(--colors-svg-icon-fill-dark,var(--color-svg-icon))}@media screen{[data-color-scheme=dark] .svg-icon[data-v-06e5463e]{fill:var(--colors-svg-icon-fill-dark,var(--color-svg-icon))}}@media screen and (prefers-color-scheme:dark){[data-color-scheme=auto] .svg-icon[data-v-06e5463e]{fill:var(--colors-svg-icon-fill-dark,var(--color-svg-icon))}}.svg-icon.icon-inline[data-v-06e5463e]{display:inline-block;vertical-align:middle;fill:currentColor}.svg-icon.icon-inline[data-v-06e5463e] .svg-icon-stroke{stroke:currentColor}[data-v-06e5463e] .svg-icon-stroke{stroke:var(--colors-svg-icon-fill-light,var(--color-svg-icon))}.theme-dark[data-v-06e5463e] .svg-icon-stroke{stroke:var(--colors-svg-icon-fill-dark,var(--color-svg-icon))}@media screen{[data-color-scheme=dark][data-v-06e5463e] .svg-icon-stroke{stroke:var(--colors-svg-icon-fill-dark,var(--color-svg-icon))}}@media screen and (prefers-color-scheme:dark){[data-color-scheme=auto][data-v-06e5463e] .svg-icon-stroke{stroke:var(--colors-svg-icon-fill-dark,var(--color-svg-icon))}}.inline-chevron-right-icon[data-v-7413f2a0]{transform:scaleX(var(--scale-inline,1))}.suggest-lang[data-v-c2dca0ae]{background:#000;color:#fff;display:flex;justify-content:center;border-bottom:1px solid var(--color-grid)}.suggest-lang__wrapper[data-v-c2dca0ae]{display:flex;align-items:center;width:100%;max-width:var(--wrapper-max-width,1920px);margin:0 .9411764706rem;position:relative;height:52px}.suggest-lang__link[data-v-c2dca0ae]{font-size:.8235294118rem;line-height:1.4285714286;font-weight:400;font-family:var(--typography-html-font,"Helvetica Neue","Helvetica","Arial",sans-serif);margin:0 auto;color:#09f}.suggest-lang__close-icon-wrapper[data-v-c2dca0ae]{position:absolute;right:-.2352941176rem;top:0;height:100%;box-sizing:border-box;display:flex;align-items:center;z-index:1}.suggest-lang__close-icon-button[data-v-c2dca0ae]{padding:.2352941176rem}.suggest-lang__close-icon-button .close-icon[data-v-c2dca0ae]{width:8px;display:block}.suggest-lang .inline-chevron-right-icon[data-v-c2dca0ae]{padding-left:.2352941176rem;width:8px}select[data-v-d21858a2]{font-size:.7058823529rem;line-height:1.3333333333;font-weight:600;font-family:var(--typography-html-font,"Helvetica Neue","Helvetica","Arial",sans-serif);color:var(--color-fill-blue);padding-right:15px;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:none;cursor:pointer}select[data-v-d21858a2]:hover{text-decoration:underline}.locale-selectoLine truncated
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
/*!
|
|
||||||
* This source file is part of the Swift.org open source project
|
|
||||||
*
|
|
||||||
* Copyright (c) 2021 Apple Inc. and the Swift project authors
|
|
||||||
* Licensed under Apache License v2.0 with Runtime Library Exception
|
|
||||||
*
|
|
||||||
* See https://swift.org/LICENSE.txt for license information
|
|
||||||
* See https://swift.org/CONTRIBUTORS.txt for Swift project authors
|
|
||||||
*/.nav-title-content[data-v-854b4dd6]{max-width:100%}.title[data-v-854b4dd6]{color:var(--color-nav-root-title,currentColor);text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:inline-block;vertical-align:top;max-width:296px}@media only screen and (max-width:1023px){.title[data-v-854b4dd6]{max-width:205px}}@media only screen and (max-width:767px){.title[data-v-854b4dd6]{flex-basis:fill;display:initial;vertical-align:initial;max-width:none}}.subhead[data-v-854b4dd6]{color:var(--color-nav-root-subhead)}.theme-dark .subhead[data-v-854b4dd6]{color:var(--color-nav-dark-root-subhead)}.mobile-dropdown[data-v-2c27d339]{box-sizing:border-box}.nav--in-breakpoint-range .mobile-dropdown[data-v-2c27d339]{padding-left:.2352941176rem;padding-right:.2352941176rem}.mobile-dropdown ul[data-v-2c27d339]{list-style:none}.mobile-dropdown .option[data-v-2c27d339]{cursor:pointer;font-size:.7058823529rem;padding:.5rem 0;display:block;text-decoration:none;color:inherit}.mobile-dropdown .option[data-v-2c27d339]:focus{outline-offset:0}.mobile-dropdown .option.depth1[data-v-2c27d339]{padding-left:.4705882353rem}.active[data-v-2c27d339],.tutorial.router-link-active[data-v-2c27d339]{font-weight:600}.active[data-v-2c27d339]:focus,.tutorial.router-link-active[data-v-2c27d339]:focus{outline:none}.chapter-list[data-v-2c27d339]:not(:first-child){margin-top:1rem}.chapter-name[data-v-2c27d339],.tutorial[data-v-2c27d339]{padding:.5rem 0;font-size:1rem;line-height:1.4705882353;font-weight:400;font-family:var(--typography-html-font,"Helvetica Neue","Helvetica","Arial",sans-serif)}.section-list[data-v-2c27d339],.tutorial-list[data-v-2c27d339]{padding:0 .5882352941rem}.chapter-list:last-child .tutorial-list[data-v-2c27d339]:last-child{padding-bottom:10em}.chapter-list[data-v-2c27d339]{display:inline-block}.form-element[data-v-f934959a]{position:relative}.form-dropdown[data-v-f934959a]{font-size:1rem;line-height:1.2352941176;font-weight:400;font-family:var(--typography-html-font,"Helvetica Neue","Helvetica","Arial",sans-serif);display:block;box-sizing:border-box;width:100%;height:3.3em;color:var(--color-dropdown-text);padding:1.1176470588rem 2.3529411765rem 0 .9411764706rem;text-align:left;border:1px solid var(--color-dropdown-border);border-radius:var(--border-radius,4px);background-clip:padding-box;margin-bottom:.8235294118rem;-webkit-appearance:none;-moz-appearance:none;appearance:none;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;min-height:32px}.form-dropdown[data-v-f934959a]:focus{box-shadow:0 0 0 4px var(--color-focus-color);outline:none;border-color:var(--color-focus-border-color)}.form-dropdown.no-eyebrow[data-v-f934959a]{padding-top:0}.form-dropdown[data-v-f934959a]:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--color-dropdown-text)}.form-dropdown[data-v-f934959a]::-ms-expand{opacity:0}.form-dropdown~.form-icon[data-v-f934959a]{position:absolute;display:block;pointer-events:none;fill:var(--color-figure-gray-tertiary);right:14px;width:13px;height:auto;top:50%;transform:translateY(-50%)}.is-open .form-dropdown~.form-icon[data-v-f934959a]{transform:translateY(-50%) scale(-1)}@media only screen and (max-width:735px){.form-dropdown~.form-icon[data-v-f934959a]{right:14px}}.form-dropdown~.form-label[data-v-f934959a]{font-size:.7058823529rem;line-height:1.75;font-weight:400;font-family:var(--typography-html-font,"Helvetica Neue","Helvetica","Arial",sans-serif);position:absolute;top:.4705882353rem;left:17px;color:var(--color-figure-gray-secondary);pointer-events:none;padding:0;z-index:1}.form-dropdown[data-v-f934959a] option{color:var(--color-dropdown-text)}.form-dropdown-selectnone[data-v-f934959a]{color:transparent}.form-dropdown-selectnone~.form-label[data-v-f934959a]{font-size:1rem;line-height:1.2352941176;font-weight:400;font-family:var(--typography-html-font,"Helvetica Neue","Helvetica","Arial",sans-serif);top:19px;left:17px;color:var(--color-figure-gray-tertiary)}.form-dropdown-selectnone[data-v-f934959a]:-moz-focusring{text-shadow:none}.form-dropdown-selectnone[data-v-f934959a]::-ms-value{display:none}.theme-dark .form-dropdown[data-v-f934959a]{color:var(--color-dropdown-dark-text);background-color:var(--color-dropdown-dark-background);border-color:var(--color-dropdown-dark-border)}.theme-dark .form-dropdown~.form-label[data-v-f934959a]{color:#ccc}.theme-dark .form-dropdown[data-v-f934959a]:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--color-dropdown-dark-text)}.theme-dark .form-dropdown.form-dropdown-selectnone[data-v-f934959a]{color:transparent}.theme-dark .form-dropdown.form-dropdown-selectnone[data-v-f934959a]:-moz-focusring{text-shadow:none}.theme-dark .form-dropdown-selectnone~.form-label[data-v-f934959a]{color:#b0b0b0}.dropdown-small[data-v-6adda760]{height:30px;display:flex;align-items:center;position:relative;background:var(--color-fill)}.dropdown-small .form-dropdown-toggle[data-v-6adda760]{line-height:1.5;font-size:12px;padding-top:0;padding-bottom:0;padding-left:20px;min-height:unseLine truncated
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
/*!
|
|
||||||
* This source file is part of the Swift.org open source project
|
|
||||||
*
|
|
||||||
* Copyright (c) 2021 Apple Inc. and the Swift project authors
|
|
||||||
* Licensed under Apache License v2.0 with Runtime Library Exception
|
|
||||||
*
|
|
||||||
* See https://swift.org/LICENSE.txt for license information
|
|
||||||
* See https://swift.org/CONTRIBUTORS.txt for Swift project authors
|
|
||||||
*/.tutorials-navigation-link[data-v-e9f9b59c]{color:var(--color-tutorials-overview-navigation-link);transition:color .3s linear}.tutorials-navigation-link[data-v-e9f9b59c]:hover{text-decoration:none;transition:none;color:var(--color-tutorials-overview-navigation-link-hover)}.tutorials-navigation-link.active[data-v-e9f9b59c]{color:var(--color-tutorials-overview-navigation-link-active)}.tutorials-navigation-list[data-v-4e0180fa]{list-style-type:none;margin:0}.tutorials-navigation-list li+li[data-v-4e0180fa]:not(.volume--named){margin-top:24px}.tutorials-navigation-list .volume--named+.volume--named[data-v-4e0180fa]{margin-top:12px}.expand-enter-active,.expand-leave-active{transition:height .3s ease-in-out;overflow:hidden}.expand-enter,.expand-leave-to{height:0}.toggle[data-v-489416f8]{color:#f0f0f0;line-height:21px;display:flex;align-items:center;width:100%;font-weight:600;padding:6px 6px 6px 0;border-bottom:1px solid #2a2a2a;text-decoration:none;box-sizing:border-box}@media only screen and (max-width:767px){.toggle[data-v-489416f8]{padding-right:6px;border-bottom-color:hsla(0,0%,100%,.1)}}.toggle .text[data-v-489416f8]{word-break:break-word}.toggle[data-v-489416f8]:hover{text-decoration:none}.toggle .toggle-icon[data-v-489416f8]{display:inline-block;transition:transform .2s ease-in;height:.4em;width:.4em;margin-left:auto;margin-right:.2em}.collapsed .toggle .toggle-icon[data-v-489416f8]{transform:rotate(45deg)}.collapsed .toggle[data-v-489416f8],.collapsed .toggle[data-v-489416f8]:hover{color:#b0b0b0}.tutorials-navigation-menu-content[data-v-489416f8]{opacity:1;transition:height .2s ease-in,opacity .2s ease-in}.collapsed .tutorials-navigation-menu-content[data-v-489416f8]{height:0;opacity:0}.tutorials-navigation-menu-content .tutorials-navigation-list[data-v-489416f8]{padding:24px 0 12px 0}.tutorials-navigation[data-v-79093ed6]{font-size:1rem;line-height:1.2352941176;font-weight:400;font-family:var(--typography-html-font,"Helvetica Neue","Helvetica","Arial",sans-serif)}.nav-title-content[data-v-854b4dd6]{max-width:100%}.title[data-v-854b4dd6]{color:var(--color-nav-root-title,currentColor);text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:inline-block;vertical-align:top;max-width:296px}@media only screen and (max-width:1023px){.title[data-v-854b4dd6]{max-width:205px}}@media only screen and (max-width:767px){.title[data-v-854b4dd6]{flex-basis:fill;display:initial;vertical-align:initial;max-width:none}}.subhead[data-v-854b4dd6]{color:var(--color-nav-root-subhead)}.theme-dark .subhead[data-v-854b4dd6]{color:var(--color-nav-dark-root-subhead)}.nav[data-v-54bcce6d] .nav-menu{padding-top:0}.nav[data-v-54bcce6d] .nav-menu .nav-menu-items{margin-left:auto}@media only screen and (min-width:768px){.nav[data-v-54bcce6d] .nav-menu .nav-menu-items .in-page-navigation{display:none}}@media only screen and (min-width:320px)and (max-width:735px){.nav[data-v-54bcce6d] .nav-menu .nav-menu-items{padding:18px 0 40px}}.hero[data-v-400ffab5]{margin-left:auto;margin-right:auto;width:1536px;width:980px;padding-bottom:4.7058823529rem;padding-top:4.7058823529rem}@media only screen and (max-width:1250px){.hero[data-v-400ffab5]{width:692px}}@media only screen and (max-width:735px){.hero[data-v-400ffab5]{width:87.5%}}@media only screen and (max-width:320px){.hero[data-v-400ffab5]{width:215px}}@media screen{.hero[data-v-400ffab5]{--color-fill:#fff;--color-fill-secondary:#f7f7f7;--color-fill-tertiary:#f0f0f0;--color-fill-quaternary:#282828;--color-fill-blue:#00f;--color-fill-light-blue-secondary:#d1d1ff;--color-fill-gray:#ccc;--color-fill-gray-secondary:#f5f5f5;--color-fill-gray-tertiary:#f0f0f0;--color-fill-gray-quaternary:#f0f0f0;--color-fill-green-secondary:#f0fff0;--color-fill-orange-secondary:#fffaf6;--color-fill-red-secondary:#fff0f5;--color-figure-blue:#36f;--color-figure-gray:#000;--color-figure-gray-secondary:#666;--color-figure-gray-secondary-alt:#666;--color-figure-gray-tertiary:#666;--color-figure-green:green;--color-figure-light-gray:#666;--color-figure-orange:#c30;--color-figure-red:red;--color-tutorials-teal:#000;--color-article-background:var(--color-fill-tertiary);--color-article-body-background:var(--color-fill);--color-aside-deprecated:var(--color-figure-gray);--color-aside-deprecated-background:var(--color-fill-orange-secondary);--color-aside-deprecated-border:var(--color-figure-orange);--color-aside-experiment:var(--color-figure-gray);--color-aside-experiment-background:var(--color-fill-gray-secondary);--color-aside-experiment-border:var(--color-figure-light-gray);--color-aside-important:var(--color-figure-gray);--color-aside-important-background:var(--color-fill-gray-secondary);--color-aside-important-border:var(--color-figure-light-gray);--color-aside-note:var(--color-figure-gray);--color-aside-note-background:var(--color-fill-gray-secondary);--color-aside-note-border:var(--color-figure-light-gray);--color-aside-tip:var(--color-figure-gray);--color-aside-tip-background:var(--color-fill-gray-secondaryLine truncated
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"schemaVersion":{"patch":0,"minor":3,"major":0},"abstract":[{"type":"text","text":"A library that provides everything the developer needs to interact with the "},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"text":" backend service.","type":"text"}],"hierarchy":{"paths":[[]]},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice"]}],"sections":[],"kind":"symbol","metadata":{"modules":[{"name":"AmiiboService"}],"role":"collection","externalID":"AmiiboService","title":"AmiiboService","symbolKind":"module","roleHeading":"Framework"},"topicSections":[{"identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboService"],"title":"Service","anchor":"Service"},{"identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboLiveClient"],"title":"Clients","anchor":"Clients"},{"identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboSeries","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboType","doc:\/\/AmiiboService\/documentation\/AmiiboService\/GameCharacter","doc:\/\/AmiiboService\/documentation\/AmiiboService\/GameSeries"],"title":"Models","anchor":"Models"},{"identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboFilter","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboSeriesFilter","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboTypeFilter","doc:\/\/AmiiboService\/documentation\/AmiiboService\/GameCharacterFilter","doc:\/\/AmiiboService\/documentation\/AmiiboService\/GameSeriesFilter"],"title":"Filters","anchor":"Filters"},{"identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboServiceError"],"title":"Errors","anchor":"Errors"}],"primaryContentSections":[{"kind":"content","content":[{"text":"Overview","level":2,"anchor":"Overview","type":"heading"},{"inlineContent":[{"text":"The ","type":"text"},{"code":"amiibo-service","type":"codeVoice"},{"text":" library is a package that allows the developer to interact with the ","type":"text"},{"isActive":true,"identifier":"https:\/\/www.amiiboapi.org","type":"reference"},{"text":" backend service seamlessly, by not only providing the ","type":"text"},{"inlineContent":[{"text":"service","type":"text"}],"type":"emphasis"},{"text":" type but also any possible ","type":"text"},{"inlineContent":[{"type":"text","text":"models"}],"type":"emphasis"},{"text":", ","type":"text"},{"inlineContent":[{"text":"filters","type":"text"}],"type":"emphasis"},{"text":", ","type":"text"},{"inlineContent":[{"text":"errors","type":"text"}],"type":"emphasis"},{"text":" and ","type":"text"},{"inlineContent":[{"text":"interfaces","type":"text"}],"type":"emphasis"},{"text":" types that might be needed during implementation.","type":"text"}],"type":"paragraph"},{"anchor":"Design","text":"Design","type":"heading","level":2},{"type":"paragraph","inlineContent":[{"type":"text","text":"Although it could have been possible to generate a one-to-one RESTful client based on the Open API specification document that describe the available endpoints of the backend service, it was decided to design a "},{"code":"AmiiboService","type":"codeVoice"},{"type":"text","text":" service type that removes the complexities of the API design imposed by the backend service, and provides the developer with a simple interface, and a seamless experience."}]},{"anchor":"Installation","text":"Installation","type":"heading","level":2},{"type":"paragraph","inlineContent":[{"type":"text","text":"To use the "},{"type":"codeVoice","code":"AmiiboService"},{"type":"text","text":" library with your package, then add it as a dependency in the "},{"type":"codeVoice","code":"Package.swift"},{"type":"text","text":" file:"}]},{"type":"codeListing","syntax":"swift","code":["let package = Package("," \/\/ name, platforms, products, etc."," dependencies: ["," .package(url: \"https:\/\/github.com\/rock-n-code\/amiibo-service\", from: \"1.4.1\"),"," \/\/ other dependencies"," ],"," targets: ["," .target("," name: \"SomeTarget\", "," dependencies: ["," .product(name: \"AmiiboService\", package: \"amiibo-service\"),"," ]"," )"," \/\/ other targets"," ]",")"]},{"type":"paragraph","inlineContent":[{"text":"It is also possible to use the ","type":"text"},{"code":"AmiiboService","type":"codeVoice"},{"text":" library with your app in Xcode, then add it as a dependency in your Xcode project.","type":"text"}]},{"style":"important","content":[{"type":"paragraph","inlineContent":[{"text":"Swift 5.10 or higher is required in order to compile this library.","type":"text"}]}],"name":"Important","type":"aside"},{"anchor":"Caching","type":"heading","level":2,"text":"Caching"},{"type":"paragraph","inlineContent":[{"text":"The ","type":"text"},{"identifiLine truncated
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"schemaVersion":{"major":0,"minor":3,"patch":0},"abstract":[{"type":"text","text":"A model that represents an amiibo."}],"relationshipsSections":[{"title":"Conforms To","identifiers":["doc:\/\/AmiiboService\/SQ","doc:\/\/AmiiboService\/SH","doc:\/\/AmiiboService\/s8SendableP","doc:\/\/AmiiboService\/s16SendableMetatypeP"],"kind":"relationships","type":"conformsTo"}],"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService"]]},"seeAlsoSections":[{"title":"Models","identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboSeries","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboType","doc:\/\/AmiiboService\/documentation\/AmiiboService\/GameCharacter","doc:\/\/AmiiboService\/documentation\/AmiiboService\/GameSeries"],"generated":true,"anchor":"Models"}],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiibo"]}],"sections":[],"kind":"symbol","metadata":{"roleHeading":"Structure","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"title":"Amiibo","modules":[{"name":"AmiiboService"}],"role":"symbol","symbolKind":"struct","navigatorTitle":[{"text":"Amiibo","kind":"identifier"}],"externalID":"s:13AmiiboService0A0V"},"topicSections":[{"title":"Nested Models","identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage"],"anchor":"Nested-Models"},{"title":"Instance Properties","identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/gameCharacter","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/gameSeries","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/head","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/identifier","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/image","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/imageURL","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/name","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/platform-swift.property","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/release-swift.property","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/series","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/tail","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/type"],"generated":true,"anchor":"Instance-Properties"},{"title":"Default Implementations","identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Equatable-Implementations"],"generated":true,"anchor":"Default-Implementations"}],"primaryContentSections":[{"declarations":[{"languages":["swift"],"platforms":["macOS"],"tokens":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Amiibo"}]}],"kind":"declarations"}],"identifier":{"url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","interfaceLanguage":"swift"},"references":{"doc://AmiiboService/SQ":{"title":"Swift.Equatable","identifier":"doc:\/\/AmiiboService\/SQ","type":"unresolvable"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/platform-swift.property":{"kind":"symbol","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"platform","kind":"identifier"},{"text":": ","kind":"text"},{"text":"Amiibo","preciseIdentifier":"s:13AmiiboService0A0V","kind":"typeIdentifier"},{"text":".","kind":"text"},{"text":"Platform","preciseIdentifier":"s:13AmiiboService0A0V8PlatformV","kind":"typeIdentifier"},{"text":"?","kind":"text"}],"abstract":[{"type":"text","text":"The game platform data for this amiibo, if available."}],"url":"\/documentation\/amiiboservice\/amiibo\/platform-swift.property","type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/platform-swift.property","title":"platform","role":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/tail":{"abstract":[{"text":"The last 8 hexadecimal characters of the amiibo identifier.","type":"text"}],"fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"tail"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"title":"tail","role":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/tail","type":"topic","kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/tail"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Platform-swift.struct":{"kind":"symbol","abstract":[{"text":"A model that represents a collection of ","type":"text"},{"type":"codeVoice","code":"Switch"},{"text":", ","type":"text"},{"type":"codeVoice","code":"Switch 2"},{"type":"text","text":", "},{"type":"codeVoice","codeLine truncated
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"primaryContentSections":[{"declarations":[{"tokens":[{"text":"static","kind":"keyword"},{"text":" ","kind":"text"},{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"!=","kind":"identifier"},{"text":" ","kind":"text"},{"text":"(","kind":"text"},{"text":"lhs","kind":"internalParam"},{"text":": ","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":", ","kind":"text"},{"text":"rhs","kind":"internalParam"},{"text":": ","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":") -> ","kind":"text"},{"text":"Bool","preciseIdentifier":"s:Sb","kind":"typeIdentifier"}],"platforms":["macOS"],"languages":["swift"]}],"kind":"declarations"},{"kind":"parameters","parameters":[{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"A value to compare."}]}],"name":"lhs"},{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Another value to compare."}]}],"name":"rhs"}]},{"kind":"content","content":[{"type":"heading","level":2,"text":"Discussion","anchor":"discussion"},{"type":"paragraph","inlineContent":[{"text":"Inequality is the inverse of equality. For any values ","type":"text"},{"code":"a","type":"codeVoice"},{"text":" and ","type":"text"},{"code":"b","type":"codeVoice"},{"text":", ","type":"text"},{"code":"a != b","type":"codeVoice"},{"text":" ","type":"text"},{"text":"implies that ","type":"text"},{"code":"a == b","type":"codeVoice"},{"text":" is ","type":"text"},{"code":"false","type":"codeVoice"},{"text":".","type":"text"}]},{"type":"paragraph","inlineContent":[{"text":"This is the default implementation of the not-equal-to operator (","type":"text"},{"code":"!=","type":"codeVoice"},{"text":")","type":"text"},{"text":" ","type":"text"},{"text":"for any type that conforms to ","type":"text"},{"code":"Equatable","type":"codeVoice"},{"text":".","type":"text"}]}]}],"sections":[],"kind":"symbol","schemaVersion":{"minor":3,"patch":0,"major":0},"identifier":{"url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/!=(_:_:)","interfaceLanguage":"swift"},"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo"]]},"abstract":[{"text":"Returns a Boolean value indicating whether two values are not equal.","type":"text"}],"metadata":{"extendedModule":"Swift","fragments":[{"text":"static","kind":"keyword"},{"text":" ","kind":"text"},{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"!=","kind":"identifier"},{"text":" ","kind":"text"},{"text":"(","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":", ","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":") -> ","kind":"text"},{"text":"Bool","kind":"typeIdentifier","preciseIdentifier":"s:Sb"}],"symbolKind":"op","modules":[{"name":"AmiiboService","relatedModules":["Swift"]}],"role":"symbol","externalID":"s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::s:13AmiiboService0A0V","roleHeading":"Operator","title":"!=(_:_:)"},"variants":[{"paths":["\/documentation\/amiiboservice\/amiibo\/!=(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"references":{"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/!=(_:_:)":{"abstract":[{"type":"text","text":"Returns a Boolean value indicating whether two values are not equal."}],"fragments":[{"text":"static","kind":"keyword"},{"text":" ","kind":"text"},{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"!=","kind":"identifier"},{"text":" ","kind":"text"},{"text":"(","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":", ","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":") -> ","kind":"text"},{"preciseIdentifier":"s:Sb","text":"Bool","kind":"typeIdentifier"}],"title":"!=(_:_:)","role":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/!=(_:_:)","type":"topic","kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/!=(_:_:)"},"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"metadata":{"roleHeading":"API Collection","role":"collectionGroup","title":"Equatable Implementations","modules":[{"name":"AmiiboService"}]},"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo"]]},"kind":"article","variants":[{"paths":["\/documentation\/amiiboservice\/amiibo\/equatable-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"patch":0,"minor":3,"major":0},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Equatable-Implementations"},"topicSections":[{"generated":true,"title":"Operators","anchor":"Operators","identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/!=(_:_:)"]}],"sections":[],"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/!=(_:_:)":{"abstract":[{"type":"text","text":"Returns a Boolean value indicating whether two values are not equal."}],"fragments":[{"text":"static","kind":"keyword"},{"text":" ","kind":"text"},{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"!=","kind":"identifier"},{"text":" ","kind":"text"},{"text":"(","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":", ","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":") -> ","kind":"text"},{"preciseIdentifier":"s:Sb","text":"Bool","kind":"typeIdentifier"}],"title":"!=(_:_:)","role":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/!=(_:_:)","type":"topic","kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/!=(_:_:)"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"abstract":[{"type":"text","text":"A model that represents a game related to an amiibo."}],"primaryContentSections":[{"declarations":[{"languages":["swift"],"platforms":["macOS"],"tokens":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Game","kind":"identifier"}]}],"kind":"declarations"}],"kind":"symbol","identifier":{"url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game","interfaceLanguage":"swift"},"relationshipsSections":[{"title":"Conforms To","identifiers":["doc:\/\/AmiiboService\/SQ","doc:\/\/AmiiboService\/SH","doc:\/\/AmiiboService\/s8SendableP","doc:\/\/AmiiboService\/s16SendableMetatypeP"],"type":"conformsTo","kind":"relationships"}],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiibo\/game"]}],"topicSections":[{"title":"Instance Properties","identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game\/identifiers","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game\/name","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game\/usages"],"generated":true,"anchor":"Instance-Properties"},{"title":"Default Implementations","identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game\/Equatable-Implementations"],"generated":true,"anchor":"Default-Implementations"}],"metadata":{"extendedModule":"AmiiboService","role":"symbol","externalID":"s:13AmiiboService0A0V4GameV","symbolKind":"struct","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Game"}],"title":"Amiibo.Game","modules":[{"name":"AmiiboService"}],"navigatorTitle":[{"kind":"identifier","text":"Game"}],"roleHeading":"Structure"},"schemaVersion":{"major":0,"patch":0,"minor":3},"sections":[],"seeAlsoSections":[{"title":"Nested Models","identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage"],"generated":true,"anchor":"Nested-Models"}],"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo"]]},"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo/Game":{"fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Game","kind":"identifier"}],"title":"Amiibo.Game","type":"topic","abstract":[{"text":"A model that represents a game related to an amiibo.","type":"text"}],"role":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/game","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game","navigatorTitle":[{"text":"Game","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Game/Equatable-Implementations":{"type":"topic","abstract":[],"kind":"article","url":"\/documentation\/amiiboservice\/amiibo\/game\/equatable-implementations","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game\/Equatable-Implementations","role":"collectionGroup","title":"Equatable Implementations"},"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/SQ":{"title":"Swift.Equatable","identifier":"doc:\/\/AmiiboService\/SQ","type":"unresolvable"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Game/usages":{"role":"symbol","kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game\/usages","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"usages","kind":"identifier"},{"text":": [","kind":"text"},{"text":"Amiibo","preciseIdentifier":"s:13AmiiboService0A0V","kind":"typeIdentifier"},{"text":".","kind":"text"},{"text":"Usage","preciseIdentifier":"s:13AmiiboService0A0V5UsageV","kind":"typeIdentifier"},{"text":"]?","kind":"text"}],"title":"usages","url":"\/documentation\/amiiboservice\/amiibo\/game\/usages","type":"topic","abstract":[{"text":"A list of amiibo usages within this game, if availaLine truncated
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"kind":"symbol","metadata":{"modules":[{"name":"AmiiboService","relatedModules":["Swift"]}],"externalID":"s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::s:13AmiiboService0A0V4GameV","fragments":[{"text":"static","kind":"keyword"},{"text":" ","kind":"text"},{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"!=","kind":"identifier"},{"text":" ","kind":"text"},{"text":"(","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":", ","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":") -> ","kind":"text"},{"text":"Bool","kind":"typeIdentifier","preciseIdentifier":"s:Sb"}],"role":"symbol","extendedModule":"Swift","title":"!=(_:_:)","symbolKind":"op","roleHeading":"Operator"},"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game"]]},"primaryContentSections":[{"declarations":[{"languages":["swift"],"tokens":[{"text":"static","kind":"keyword"},{"text":" ","kind":"text"},{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"!=","kind":"identifier"},{"text":" ","kind":"text"},{"text":"(","kind":"text"},{"text":"lhs","kind":"internalParam"},{"text":": ","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":", ","kind":"text"},{"text":"rhs","kind":"internalParam"},{"text":": ","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":") -> ","kind":"text"},{"text":"Bool","preciseIdentifier":"s:Sb","kind":"typeIdentifier"}],"platforms":["macOS"]}],"kind":"declarations"},{"kind":"parameters","parameters":[{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"A value to compare."}]}],"name":"lhs"},{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Another value to compare."}]}],"name":"rhs"}]},{"kind":"content","content":[{"type":"heading","level":2,"text":"Discussion","anchor":"discussion"},{"type":"paragraph","inlineContent":[{"text":"Inequality is the inverse of equality. For any values ","type":"text"},{"code":"a","type":"codeVoice"},{"text":" and ","type":"text"},{"code":"b","type":"codeVoice"},{"text":", ","type":"text"},{"code":"a != b","type":"codeVoice"},{"text":" ","type":"text"},{"text":"implies that ","type":"text"},{"code":"a == b","type":"codeVoice"},{"text":" is ","type":"text"},{"code":"false","type":"codeVoice"},{"text":".","type":"text"}]},{"type":"paragraph","inlineContent":[{"text":"This is the default implementation of the not-equal-to operator (","type":"text"},{"code":"!=","type":"codeVoice"},{"text":")","type":"text"},{"text":" ","type":"text"},{"text":"for any type that conforms to ","type":"text"},{"code":"Equatable","type":"codeVoice"},{"text":".","type":"text"}]}]}],"variants":[{"paths":["\/documentation\/amiiboservice\/amiibo\/game\/!=(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"abstract":[{"text":"Returns a Boolean value indicating whether two values are not equal.","type":"text"}],"schemaVersion":{"major":0,"minor":3,"patch":0},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game\/!=(_:_:)"},"sections":[],"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo/Game/!=(_:_:)":{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game\/!=(_:_:)","fragments":[{"text":"static","kind":"keyword"},{"text":" ","kind":"text"},{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"!=","kind":"identifier"},{"text":" ","kind":"text"},{"text":"(","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":", ","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":") -> ","kind":"text"},{"text":"Bool","kind":"typeIdentifier","preciseIdentifier":"s:Sb"}],"title":"!=(_:_:)","role":"symbol","type":"topic","url":"\/documentation\/amiiboservice\/amiibo\/game\/!=(_:_:)","kind":"symbol","abstract":[{"type":"text","text":"Returns a Boolean value indicating whether two values are not equal."}]},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Game":{"fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Game","kind":"identifier"}],"title":"Amiibo.Game","type":"topic","abstract":[{"text":"A model that represents a game related to an amiibo.","type":"text"}],"role":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/game","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game","navigatorTitle":[{"text":"Game","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":Line truncated
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"sections":[],"kind":"article","schemaVersion":{"major":0,"patch":0,"minor":3},"identifier":{"url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game\/Equatable-Implementations","interfaceLanguage":"swift"},"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game"]]},"topicSections":[{"identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game\/!=(_:_:)"],"title":"Operators","anchor":"Operators","generated":true}],"metadata":{"modules":[{"name":"AmiiboService"}],"title":"Equatable Implementations","roleHeading":"API Collection","role":"collectionGroup"},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiibo\/game\/equatable-implementations"]}],"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Game":{"fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Game","kind":"identifier"}],"title":"Amiibo.Game","type":"topic","abstract":[{"text":"A model that represents a game related to an amiibo.","type":"text"}],"role":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/game","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game","navigatorTitle":[{"text":"Game","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Game/!=(_:_:)":{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game\/!=(_:_:)","fragments":[{"text":"static","kind":"keyword"},{"text":" ","kind":"text"},{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"!=","kind":"identifier"},{"text":" ","kind":"text"},{"text":"(","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":", ","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":") -> ","kind":"text"},{"text":"Bool","kind":"typeIdentifier","preciseIdentifier":"s:Sb"}],"title":"!=(_:_:)","role":"symbol","type":"topic","url":"\/documentation\/amiiboservice\/amiibo\/game\/!=(_:_:)","kind":"symbol","abstract":[{"type":"text","text":"Returns a Boolean value indicating whether two values are not equal."}]}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"metadata":{"symbolKind":"property","role":"symbol","roleHeading":"Instance Property","externalID":"s:13AmiiboService0A0V4GameV11identifiersSaySSGvp","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"identifiers"},{"kind":"text","text":": ["},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"]"}],"title":"identifiers","modules":[{"name":"AmiiboService"}]},"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game"]]},"abstract":[{"text":"A list of game identifiers associated with this game.","type":"text"}],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiibo\/game\/identifiers"]}],"kind":"symbol","schemaVersion":{"minor":3,"major":0,"patch":0},"primaryContentSections":[{"declarations":[{"platforms":["macOS"],"tokens":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"identifiers","kind":"identifier"},{"text":": [","kind":"text"},{"preciseIdentifier":"s:SS","text":"String","kind":"typeIdentifier"},{"text":"]","kind":"text"}],"languages":["swift"]}],"kind":"declarations"}],"identifier":{"url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game\/identifiers","interfaceLanguage":"swift"},"sections":[],"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo/Game/identifiers":{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game\/identifiers","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"identifiers"},{"kind":"text","text":": ["},{"kind":"typeIdentifier","preciseIdentifier":"s:SS","text":"String"},{"kind":"text","text":"]"}],"title":"identifiers","role":"symbol","type":"topic","url":"\/documentation\/amiiboservice\/amiibo\/game\/identifiers","kind":"symbol","abstract":[{"type":"text","text":"A list of game identifiers associated with this game."}]},"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Game":{"fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Game","kind":"identifier"}],"title":"Amiibo.Game","type":"topic","abstract":[{"text":"A model that represents a game related to an amiibo.","type":"text"}],"role":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/game","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game","navigatorTitle":[{"text":"Game","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"schemaVersion":{"major":0,"minor":3,"patch":0},"abstract":[{"text":"The name of this game.","type":"text"}],"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game"]]},"variants":[{"paths":["\/documentation\/amiiboservice\/amiibo\/game\/name"],"traits":[{"interfaceLanguage":"swift"}]}],"metadata":{"roleHeading":"Instance Property","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"name"},{"text":": ","kind":"text"},{"text":"String","preciseIdentifier":"s:SS","kind":"typeIdentifier"}],"title":"name","modules":[{"name":"AmiiboService"}],"role":"symbol","symbolKind":"property","externalID":"s:13AmiiboService0A0V4GameV4nameSSvp"},"kind":"symbol","sections":[],"primaryContentSections":[{"kind":"declarations","declarations":[{"platforms":["macOS"],"tokens":[{"kind":"keyword","text":"let"},{"text":" ","kind":"text"},{"kind":"identifier","text":"name"},{"kind":"text","text":": "},{"preciseIdentifier":"s:SS","text":"String","kind":"typeIdentifier"}],"languages":["swift"]}]}],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game\/name"},"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo/Game/name":{"kind":"symbol","fragments":[{"text":"let","kind":"keyword"},{"kind":"text","text":" "},{"kind":"identifier","text":"name"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"abstract":[{"text":"The name of this game.","type":"text"}],"url":"\/documentation\/amiiboservice\/amiibo\/game\/name","type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game\/name","title":"name","role":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Game":{"fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Game","kind":"identifier"}],"title":"Amiibo.Game","type":"topic","abstract":[{"text":"A model that represents a game related to an amiibo.","type":"text"}],"role":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/game","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game","navigatorTitle":[{"text":"Game","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"metadata":{"roleHeading":"Instance Property","externalID":"s:13AmiiboService0A0V4GameV6usagesSayAC5UsageVGSgvp","modules":[{"name":"AmiiboService"}],"symbolKind":"property","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"usages","kind":"identifier"},{"text":": [","kind":"text"},{"text":"Amiibo","kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService0A0V"},{"text":".","kind":"text"},{"text":"Usage","kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService0A0V5UsageV"},{"text":"]?","kind":"text"}],"role":"symbol","title":"usages"},"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game"]]},"abstract":[{"text":"A list of amiibo usages within this game, if available.","type":"text"}],"variants":[{"paths":["\/documentation\/amiiboservice\/amiibo\/game\/usages"],"traits":[{"interfaceLanguage":"swift"}]}],"kind":"symbol","schemaVersion":{"minor":3,"patch":0,"major":0},"primaryContentSections":[{"declarations":[{"tokens":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"usages","kind":"identifier"},{"text":": [","kind":"text"},{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","text":"Amiibo","kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService0A0V"},{"text":".","kind":"text"},{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage","text":"Usage","kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService0A0V5UsageV"},{"text":"]?","kind":"text"}],"platforms":["macOS"],"languages":["swift"]}],"kind":"declarations"}],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game\/usages"},"sections":[],"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo/Game":{"fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Game","kind":"identifier"}],"title":"Amiibo.Game","type":"topic","abstract":[{"text":"A model that represents a game related to an amiibo.","type":"text"}],"role":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/game","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game","navigatorTitle":[{"text":"Game","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Game/usages":{"role":"symbol","kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game\/usages","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"usages","kind":"identifier"},{"text":": [","kind":"text"},{"text":"Amiibo","preciseIdentifier":"s:13AmiiboService0A0V","kind":"typeIdentifier"},{"text":".","kind":"text"},{"text":"Usage","preciseIdentifier":"s:13AmiiboService0A0V5UsageV","kind":"typeIdentifier"},{"text":"]?","kind":"text"}],"title":"usages","url":"\/documentation\/amiiboservice\/amiibo\/game\/usages","type":"topic","abstract":[{"text":"A list of amiibo usages within this game, if available.","type":"text"}]},"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Usage":{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"Usage"}],"title":"Amiibo.Usage","role":"symbol","type":"topic","url":"\/documentation\/amiiboservice\/amiibo\/usage","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"Usage"}],"abstract":[{"type":"text","text":"A model that represents the usage of an amiibo within a certain game."}]}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"primaryContentSections":[{"declarations":[{"platforms":["macOS"],"tokens":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"gameCharacter"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"s:SS","text":"String"}],"languages":["swift"]}],"kind":"declarations"}],"sections":[],"schemaVersion":{"patch":0,"minor":3,"major":0},"kind":"symbol","hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo"]]},"identifier":{"url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/gameCharacter","interfaceLanguage":"swift"},"abstract":[{"text":"The name of the game character associated with this amiibo.","type":"text"}],"metadata":{"fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"gameCharacter"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"symbolKind":"property","role":"symbol","modules":[{"name":"AmiiboService"}],"externalID":"s:13AmiiboService0A0V13gameCharacterSSvp","roleHeading":"Instance Property","title":"gameCharacter"},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiibo\/gamecharacter"]}],"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo/gameCharacter":{"abstract":[{"text":"The name of the game character associated with this amiibo.","type":"text"}],"fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"gameCharacter","kind":"identifier"},{"text":": ","kind":"text"},{"preciseIdentifier":"s:SS","text":"String","kind":"typeIdentifier"}],"title":"gameCharacter","role":"symbol","type":"topic","url":"\/documentation\/amiiboservice\/amiibo\/gamecharacter","kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/gameCharacter"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"},"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"gameSeries"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"s:SS","text":"String"}],"languages":["swift"],"platforms":["macOS"]}]}],"sections":[],"kind":"symbol","schemaVersion":{"minor":3,"patch":0,"major":0},"identifier":{"url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/gameSeries","interfaceLanguage":"swift"},"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo"]]},"abstract":[{"text":"The name of the game series associated with this amiibo.","type":"text"}],"metadata":{"fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"gameSeries","kind":"identifier"},{"text":": ","kind":"text"},{"preciseIdentifier":"s:SS","text":"String","kind":"typeIdentifier"}],"symbolKind":"property","role":"symbol","modules":[{"name":"AmiiboService"}],"externalID":"s:13AmiiboService0A0V10gameSeriesSSvp","roleHeading":"Instance Property","title":"gameSeries"},"variants":[{"paths":["\/documentation\/amiiboservice\/amiibo\/gameseries"],"traits":[{"interfaceLanguage":"swift"}]}],"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/gameSeries":{"role":"symbol","kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/gameSeries","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"gameSeries"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"url":"\/documentation\/amiiboservice\/amiibo\/gameseries","type":"topic","title":"gameSeries","abstract":[{"type":"text","text":"The name of the game series associated with this amiibo."}]}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo"]]},"schemaVersion":{"minor":3,"major":0,"patch":0},"sections":[],"primaryContentSections":[{"kind":"declarations","declarations":[{"platforms":["macOS"],"languages":["swift"],"tokens":[{"text":"let","kind":"keyword"},{"kind":"text","text":" "},{"text":"head","kind":"identifier"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"s:SS","text":"String"}]}]}],"variants":[{"paths":["\/documentation\/amiiboservice\/amiibo\/head"],"traits":[{"interfaceLanguage":"swift"}]}],"kind":"symbol","metadata":{"symbolKind":"property","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"head"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"role":"symbol","roleHeading":"Instance Property","modules":[{"name":"AmiiboService"}],"title":"head","externalID":"s:13AmiiboService0A0V4headSSvp"},"abstract":[{"text":"The first 8 hexadecimal characters of the amiibo identifier.","type":"text"}],"identifier":{"url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/head","interfaceLanguage":"swift"},"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/head":{"abstract":[{"text":"The first 8 hexadecimal characters of the amiibo identifier.","type":"text"}],"kind":"symbol","role":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/head","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"head","kind":"identifier"},{"text":": ","kind":"text"},{"text":"String","kind":"typeIdentifier","preciseIdentifier":"s:SS"}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/head","title":"head","type":"topic"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"abstract":[{"type":"text","text":"The full 16-character hexadecimal identifier, composed of the "},{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/head","type":"reference","isActive":true},{"type":"text","text":" and "},{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/tail","type":"reference","isActive":true},{"type":"text","text":"."}],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiibo\/identifier"]}],"kind":"symbol","identifier":{"url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/identifier","interfaceLanguage":"swift"},"metadata":{"role":"symbol","externalID":"s:13AmiiboService0A0V10identifierSSvp","symbolKind":"property","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"identifier"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"s:SS","text":"String"}],"title":"identifier","modules":[{"name":"AmiiboService"}],"roleHeading":"Instance Property"},"sections":[],"schemaVersion":{"major":0,"minor":3,"patch":0},"primaryContentSections":[{"declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"identifier"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}],"kind":"declarations"}],"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo"]]},"references":{"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/identifier":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"identifier"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"s:SS","text":"String"}],"kind":"symbol","role":"symbol","abstract":[{"type":"text","text":"The full 16-character hexadecimal identifier, composed of the "},{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/head","type":"reference","isActive":true},{"type":"text","text":" and "},{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/tail","type":"reference","isActive":true},{"type":"text","text":"."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/identifier","url":"\/documentation\/amiiboservice\/amiibo\/identifier","type":"topic","title":"identifier"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/tail":{"abstract":[{"text":"The last 8 hexadecimal characters of the amiibo identifier.","type":"text"}],"fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"tail"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"title":"tail","role":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/tail","type":"topic","kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/tail"},"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/head":{"abstract":[{"text":"The first 8 hexadecimal characters of the amiibo identifier.","type":"text"}],"kind":"symbol","role":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/head","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"head","kind":"identifier"},{"text":": ","kind":"text"},{"text":"String","kind":"typeIdentifier","preciseIdentifier":"s:SS"}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/head","title":"head","type":"topic"}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"schemaVersion":{"major":0,"minor":3,"patch":0},"abstract":[{"text":"A URL string pointing to the image of this amiibo.","type":"text"}],"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo"]]},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiibo\/image"]}],"sections":[],"metadata":{"roleHeading":"Instance Property","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"image"},{"kind":"text","text":": "},{"preciseIdentifier":"s:SS","kind":"typeIdentifier","text":"String"}],"title":"image","modules":[{"name":"AmiiboService"}],"role":"symbol","symbolKind":"property","externalID":"s:13AmiiboService0A0V5imageSSvp"},"kind":"symbol","primaryContentSections":[{"kind":"declarations","declarations":[{"languages":["swift"],"platforms":["macOS"],"tokens":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"image","kind":"identifier"},{"text":": ","kind":"text"},{"text":"String","preciseIdentifier":"s:SS","kind":"typeIdentifier"}]}]}],"identifier":{"url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/image","interfaceLanguage":"swift"},"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo/image":{"kind":"symbol","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"image","kind":"identifier"},{"text":": ","kind":"text"},{"text":"String","preciseIdentifier":"s:SS","kind":"typeIdentifier"}],"abstract":[{"type":"text","text":"A URL string pointing to the image of this amiibo."}],"url":"\/documentation\/amiiboservice\/amiibo\/image","type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/image","title":"image","role":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"schemaVersion":{"patch":0,"major":0,"minor":3},"abstract":[{"text":"A URL constructed from the ","type":"text"},{"type":"reference","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/image","isActive":true},{"text":" string, if valid.","type":"text"}],"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo"]]},"variants":[{"paths":["\/documentation\/amiiboservice\/amiibo\/imageurl"],"traits":[{"interfaceLanguage":"swift"}]}],"metadata":{"roleHeading":"Instance Property","fragments":[{"text":"var","kind":"keyword"},{"text":" ","kind":"text"},{"text":"imageURL","kind":"identifier"},{"text":": ","kind":"text"},{"preciseIdentifier":"s:10Foundation3URLV","text":"URL","kind":"typeIdentifier"},{"text":"?","kind":"text"}],"title":"imageURL","modules":[{"name":"AmiiboService"}],"role":"symbol","symbolKind":"property","externalID":"s:13AmiiboService0A0V8imageURL10Foundation0D0VSgvp"},"kind":"symbol","sections":[],"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"text":"var","kind":"keyword"},{"text":" ","kind":"text"},{"text":"imageURL","kind":"identifier"},{"text":": ","kind":"text"},{"text":"URL","kind":"typeIdentifier","preciseIdentifier":"s:10Foundation3URLV"},{"text":"? { ","kind":"text"},{"text":"get","kind":"keyword"},{"text":" }","kind":"text"}],"platforms":["macOS"],"languages":["swift"]}]}],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/imageURL"},"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/imageURL":{"kind":"symbol","fragments":[{"text":"var","kind":"keyword"},{"text":" ","kind":"text"},{"text":"imageURL","kind":"identifier"},{"text":": ","kind":"text"},{"preciseIdentifier":"s:10Foundation3URLV","text":"URL","kind":"typeIdentifier"},{"text":"?","kind":"text"}],"abstract":[{"text":"A URL constructed from the ","type":"text"},{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/image","isActive":true,"type":"reference"},{"text":" string, if valid.","type":"text"}],"url":"\/documentation\/amiiboservice\/amiibo\/imageurl","type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/imageURL","title":"imageURL","role":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/image":{"kind":"symbol","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"image","kind":"identifier"},{"text":": ","kind":"text"},{"text":"String","preciseIdentifier":"s:SS","kind":"typeIdentifier"}],"abstract":[{"type":"text","text":"A URL string pointing to the image of this amiibo."}],"url":"\/documentation\/amiiboservice\/amiibo\/image","type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/image","title":"image","role":"symbol"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"schemaVersion":{"minor":3,"major":0,"patch":0},"abstract":[{"type":"text","text":"The name of this amiibo."}],"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo"]]},"variants":[{"paths":["\/documentation\/amiiboservice\/amiibo\/name"],"traits":[{"interfaceLanguage":"swift"}]}],"metadata":{"roleHeading":"Instance Property","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"name","kind":"identifier"},{"text":": ","kind":"text"},{"text":"String","kind":"typeIdentifier","preciseIdentifier":"s:SS"}],"title":"name","modules":[{"name":"AmiiboService"}],"role":"symbol","symbolKind":"property","externalID":"s:13AmiiboService0A0V4nameSSvp"},"kind":"symbol","sections":[],"primaryContentSections":[{"kind":"declarations","declarations":[{"languages":["swift"],"tokens":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"name","kind":"identifier"},{"text":": ","kind":"text"},{"text":"String","preciseIdentifier":"s:SS","kind":"typeIdentifier"}],"platforms":["macOS"]}]}],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/name"},"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo/name":{"kind":"symbol","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"name","kind":"identifier"},{"text":": ","kind":"text"},{"text":"String","kind":"typeIdentifier","preciseIdentifier":"s:SS"}],"abstract":[{"type":"text","text":"The name of this amiibo."}],"url":"\/documentation\/amiiboservice\/amiibo\/name","type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/name","title":"name","role":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"kind":"symbol","hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo"]]},"metadata":{"modules":[{"name":"AmiiboService"}],"externalID":"s:13AmiiboService0A0V8platformAC8PlatformVSgvp","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"platform","kind":"identifier"},{"text":": ","kind":"text"},{"text":"Amiibo","preciseIdentifier":"s:13AmiiboService0A0V","kind":"typeIdentifier"},{"text":".","kind":"text"},{"text":"Platform","preciseIdentifier":"s:13AmiiboService0A0V8PlatformV","kind":"typeIdentifier"},{"text":"?","kind":"text"}],"role":"symbol","title":"platform","symbolKind":"property","roleHeading":"Instance Property"},"primaryContentSections":[{"declarations":[{"tokens":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"platform","kind":"identifier"},{"text":": ","kind":"text"},{"preciseIdentifier":"s:13AmiiboService0A0V","text":"Amiibo","kind":"typeIdentifier","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo"},{"text":".","kind":"text"},{"preciseIdentifier":"s:13AmiiboService0A0V8PlatformV","text":"Platform","kind":"typeIdentifier","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct"},{"text":"?","kind":"text"}],"languages":["swift"],"platforms":["macOS"]}],"kind":"declarations"}],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiibo\/platform-swift.property"]}],"abstract":[{"text":"The game platform data for this amiibo, if available.","type":"text"}],"schemaVersion":{"minor":3,"major":0,"patch":0},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/platform-swift.property"},"sections":[],"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/platform-swift.property":{"kind":"symbol","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"platform","kind":"identifier"},{"text":": ","kind":"text"},{"text":"Amiibo","preciseIdentifier":"s:13AmiiboService0A0V","kind":"typeIdentifier"},{"text":".","kind":"text"},{"text":"Platform","preciseIdentifier":"s:13AmiiboService0A0V8PlatformV","kind":"typeIdentifier"},{"text":"?","kind":"text"}],"abstract":[{"type":"text","text":"The game platform data for this amiibo, if available."}],"url":"\/documentation\/amiiboservice\/amiibo\/platform-swift.property","type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/platform-swift.property","title":"platform","role":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Platform-swift.struct":{"kind":"symbol","abstract":[{"text":"A model that represents a collection of ","type":"text"},{"type":"codeVoice","code":"Switch"},{"text":", ","type":"text"},{"type":"codeVoice","code":"Switch 2"},{"type":"text","text":", "},{"type":"codeVoice","code":"3DS"},{"type":"text","text":", and "},{"type":"codeVoice","code":"Wii U"},{"text":" games related to an amiibo.","type":"text"}],"title":"Amiibo.Platform","role":"symbol","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Platform","kind":"identifier"}],"navigatorTitle":[{"text":"Platform","kind":"identifier"}],"url":"\/documentation\/amiiboservice\/amiibo\/platform-swift.struct","type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"schemaVersion":{"major":0,"patch":0,"minor":3},"abstract":[{"text":"A model that represents a collection of ","type":"text"},{"type":"codeVoice","code":"Switch"},{"text":", ","type":"text"},{"type":"codeVoice","code":"Switch 2"},{"text":", ","type":"text"},{"type":"codeVoice","code":"3DS"},{"text":", and ","type":"text"},{"type":"codeVoice","code":"Wii U"},{"text":" games related to an amiibo.","type":"text"}],"relationshipsSections":[{"kind":"relationships","title":"Conforms To","identifiers":["doc:\/\/AmiiboService\/SQ","doc:\/\/AmiiboService\/SH","doc:\/\/AmiiboService\/s8SendableP","doc:\/\/AmiiboService\/s16SendableMetatypeP"],"type":"conformsTo"}],"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo"]]},"seeAlsoSections":[{"title":"Nested Models","identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage"],"generated":true,"anchor":"Nested-Models"}],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiibo\/platform-swift.struct"]}],"sections":[],"metadata":{"roleHeading":"Structure","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Platform"}],"title":"Amiibo.Platform","modules":[{"name":"AmiiboService"}],"role":"symbol","symbolKind":"struct","navigatorTitle":[{"kind":"identifier","text":"Platform"}],"externalID":"s:13AmiiboService0A0V8PlatformV","extendedModule":"AmiiboService"},"kind":"symbol","topicSections":[{"title":"Instance Properties","identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct\/switch","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct\/switch2","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct\/threeDS","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct\/wiiU"],"generated":true,"anchor":"Instance-Properties"},{"title":"Default Implementations","identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct\/Equatable-Implementations"],"generated":true,"anchor":"Default-Implementations"}],"primaryContentSections":[{"declarations":[{"tokens":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Platform","kind":"identifier"}],"platforms":["macOS"],"languages":["swift"]}],"kind":"declarations"}],"identifier":{"url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct","interfaceLanguage":"swift"},"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo/Game":{"fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Game","kind":"identifier"}],"title":"Amiibo.Game","type":"topic","abstract":[{"text":"A model that represents a game related to an amiibo.","type":"text"}],"role":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/game","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game","navigatorTitle":[{"text":"Game","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Platform-swift.struct/wiiU":{"url":"\/documentation\/amiiboservice\/amiibo\/platform-swift.struct\/wiiu","kind":"symbol","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"wiiU","kind":"identifier"},{"text":": [","kind":"text"},{"text":"Amiibo","kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService0A0V"},{"text":".","kind":"text"},{"text":"Game","preciseIdentifier":"s:13AmiiboService0A0V4GameV","kind":"typeIdentifier"},{"text":"]","kind":"text"}],"abstract":[{"text":"A list of ","type":"text"},{"type":"codeVoice","code":"Wii U"},{"type":"text","text":" games related to an amiibo."}],"type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct\/wiiU","title":"wiiU","role":"symbol"},"doc://AmiiboService/SQ":{"title":"Swift.Equatable","identifier":"doc:\/\/AmiiboService\/SQ","type":"unresolvable"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Platform-swift.struct/switch":{"fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"`switch`","kind":"identifier"},{"kind":"text","text":": ["},{"kind":"typeIdentifier","text":"Amiibo","pLine truncated
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"metadata":{"roleHeading":"Operator","externalID":"s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::s:13AmiiboService0A0V8PlatformV","extendedModule":"Swift","modules":[{"relatedModules":["Swift"],"name":"AmiiboService"}],"symbolKind":"op","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"preciseIdentifier":"s:Sb","kind":"typeIdentifier","text":"Bool"}],"role":"symbol","title":"!=(_:_:)"},"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct"]]},"abstract":[{"text":"Returns a Boolean value indicating whether two values are not equal.","type":"text"}],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiibo\/platform-swift.struct\/!=(_:_:)"]}],"kind":"symbol","schemaVersion":{"patch":0,"major":0,"minor":3},"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"text":"static","kind":"keyword"},{"text":" ","kind":"text"},{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"!=","kind":"identifier"},{"text":" ","kind":"text"},{"text":"(","kind":"text"},{"text":"lhs","kind":"internalParam"},{"text":": ","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":", ","kind":"text"},{"text":"rhs","kind":"internalParam"},{"text":": ","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":") -> ","kind":"text"},{"preciseIdentifier":"s:Sb","text":"Bool","kind":"typeIdentifier"}],"platforms":["macOS"],"languages":["swift"]}]},{"kind":"parameters","parameters":[{"content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"A value to compare."}]}],"name":"lhs"},{"content":[{"inlineContent":[{"type":"text","text":"Another value to compare."}],"type":"paragraph"}],"name":"rhs"}]},{"kind":"content","content":[{"type":"heading","level":2,"text":"Discussion","anchor":"discussion"},{"type":"paragraph","inlineContent":[{"type":"text","text":"Inequality is the inverse of equality. For any values "},{"type":"codeVoice","code":"a"},{"type":"text","text":" and "},{"type":"codeVoice","code":"b"},{"type":"text","text":", "},{"type":"codeVoice","code":"a != b"},{"type":"text","text":" "},{"type":"text","text":"implies that "},{"type":"codeVoice","code":"a == b"},{"type":"text","text":" is "},{"type":"codeVoice","code":"false"},{"type":"text","text":"."}]},{"type":"paragraph","inlineContent":[{"type":"text","text":"This is the default implementation of the not-equal-to operator ("},{"type":"codeVoice","code":"!="},{"type":"text","text":")"},{"type":"text","text":" "},{"type":"text","text":"for any type that conforms to "},{"code":"Equatable","type":"codeVoice"},{"text":".","type":"text"}]}]}],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct\/!=(_:_:)"},"sections":[],"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo/Platform-swift.struct":{"kind":"symbol","abstract":[{"text":"A model that represents a collection of ","type":"text"},{"type":"codeVoice","code":"Switch"},{"text":", ","type":"text"},{"type":"codeVoice","code":"Switch 2"},{"type":"text","text":", "},{"type":"codeVoice","code":"3DS"},{"type":"text","text":", and "},{"type":"codeVoice","code":"Wii U"},{"text":" games related to an amiibo.","type":"text"}],"title":"Amiibo.Platform","role":"symbol","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Platform","kind":"identifier"}],"navigatorTitle":[{"text":"Platform","kind":"identifier"}],"url":"\/documentation\/amiiboservice\/amiibo\/platform-swift.struct","type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Platform-swift.struct/!=(_:_:)":{"abstract":[{"text":"Returns a Boolean value indicating whether two values are not equal.","type":"text"}],"type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct\/!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","preciseIdentifier":"s:Sb","text":"Bool"}],"title":"!=(_:_:)","url":"\/documentation\/amiiboservice\/amiibo\/platform-swift.struct\/!=(_:_:)","role":"symbol","kind":"symboLine truncated
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
{"kind":"article","schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct\/Equatable-Implementations","interfaceLanguage":"swift"},"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct"]]},"topicSections":[{"title":"Operators","generated":true,"identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct\/!=(_:_:)"],"anchor":"Operators"}],"metadata":{"role":"collectionGroup","title":"Equatable Implementations","modules":[{"name":"AmiiboService"}],"roleHeading":"API Collection"},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiibo\/platform-swift.struct\/equatable-implementations"]}],"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Platform-swift.struct":{"kind":"symbol","abstract":[{"text":"A model that represents a collection of ","type":"text"},{"type":"codeVoice","code":"Switch"},{"text":", ","type":"text"},{"type":"codeVoice","code":"Switch 2"},{"type":"text","text":", "},{"type":"codeVoice","code":"3DS"},{"type":"text","text":", and "},{"type":"codeVoice","code":"Wii U"},{"text":" games related to an amiibo.","type":"text"}],"title":"Amiibo.Platform","role":"symbol","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Platform","kind":"identifier"}],"navigatorTitle":[{"text":"Platform","kind":"identifier"}],"url":"\/documentation\/amiiboservice\/amiibo\/platform-swift.struct","type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Platform-swift.struct/!=(_:_:)":{"abstract":[{"text":"Returns a Boolean value indicating whether two values are not equal.","type":"text"}],"type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct\/!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","preciseIdentifier":"s:Sb","text":"Bool"}],"title":"!=(_:_:)","url":"\/documentation\/amiiboservice\/amiibo\/platform-swift.struct\/!=(_:_:)","role":"symbol","kind":"symbol"}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"primaryContentSections":[{"declarations":[{"platforms":["macOS"],"languages":["swift"],"tokens":[{"kind":"keyword","text":"let"},{"text":" ","kind":"text"},{"text":"`switch`","kind":"identifier"},{"text":": [","kind":"text"},{"text":"Amiibo","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService0A0V"},{"kind":"text","text":"."},{"text":"Game","preciseIdentifier":"s:13AmiiboService0A0V4GameV","kind":"typeIdentifier","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game"},{"text":"]","kind":"text"}]}],"kind":"declarations"}],"kind":"symbol","identifier":{"url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct\/switch","interfaceLanguage":"swift"},"abstract":[{"text":"A list of ","type":"text"},{"code":"Switch","type":"codeVoice"},{"type":"text","text":" games related to an amiibo."}],"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct"]]},"metadata":{"symbolKind":"property","modules":[{"name":"AmiiboService"}],"title":"switch","roleHeading":"Instance Property","externalID":"s:13AmiiboService0A0V8PlatformV6switchSayAC4GameVGvp","role":"symbol","fragments":[{"kind":"keyword","text":"let"},{"text":" ","kind":"text"},{"kind":"identifier","text":"`switch`"},{"kind":"text","text":": ["},{"preciseIdentifier":"s:13AmiiboService0A0V","text":"Amiibo","kind":"typeIdentifier"},{"text":".","kind":"text"},{"preciseIdentifier":"s:13AmiiboService0A0V4GameV","text":"Game","kind":"typeIdentifier"},{"text":"]","kind":"text"}]},"variants":[{"paths":["\/documentation\/amiiboservice\/amiibo\/platform-swift.struct\/switch"],"traits":[{"interfaceLanguage":"swift"}]}],"sections":[],"schemaVersion":{"minor":3,"major":0,"patch":0},"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"text":"Amiibo","kind":"identifier"}],"role":"symbol","type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"kind":"identifier","text":"Amiibo"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Platform-swift.struct":{"kind":"symbol","abstract":[{"text":"A model that represents a collection of ","type":"text"},{"type":"codeVoice","code":"Switch"},{"text":", ","type":"text"},{"type":"codeVoice","code":"Switch 2"},{"type":"text","text":", "},{"type":"codeVoice","code":"3DS"},{"type":"text","text":", and "},{"type":"codeVoice","code":"Wii U"},{"text":" games related to an amiibo.","type":"text"}],"title":"Amiibo.Platform","role":"symbol","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Platform","kind":"identifier"}],"navigatorTitle":[{"text":"Platform","kind":"identifier"}],"url":"\/documentation\/amiiboservice\/amiibo\/platform-swift.struct","type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Platform-swift.struct/switch":{"fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"`switch`","kind":"identifier"},{"kind":"text","text":": ["},{"kind":"typeIdentifier","text":"Amiibo","preciseIdentifier":"s:13AmiiboService0A0V"},{"kind":"text","text":"."},{"kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService0A0V4GameV","text":"Game"},{"kind":"text","text":"]"}],"type":"topic","kind":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/platform-swift.struct\/switch","abstract":[{"type":"text","text":"A list of "},{"code":"Switch","type":"codeVoice"},{"type":"text","text":" games related to an amiibo."}],"role":"symbol","title":"switch","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct\/switch"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Game":{"fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Game","kind":"identifier"}],"title":"Amiibo.Game","type":"topic","abstract":[{"text":"A model that represents a game related to an amiibo.","type":"text"}],"role":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/game","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game","navigatorTitle":[{"text":"Game","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text"Line truncated
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"schemaVersion":{"major":0,"minor":3,"patch":0},"abstract":[{"text":"A list of ","type":"text"},{"code":"Switch 2","type":"codeVoice"},{"text":" games related to an amiibo.","type":"text"}],"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct"]]},"variants":[{"paths":["\/documentation\/amiiboservice\/amiibo\/platform-swift.struct\/switch2"],"traits":[{"interfaceLanguage":"swift"}]}],"sections":[],"kind":"symbol","metadata":{"roleHeading":"Instance Property","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"switch2"},{"kind":"text","text":": ["},{"kind":"typeIdentifier","text":"Amiibo","preciseIdentifier":"s:13AmiiboService0A0V"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"Game","preciseIdentifier":"s:13AmiiboService0A0V4GameV"},{"kind":"text","text":"]"}],"title":"switch2","modules":[{"name":"AmiiboService"}],"role":"symbol","symbolKind":"property","externalID":"s:13AmiiboService0A0V8PlatformV7switch2SayAC4GameVGvp"},"primaryContentSections":[{"declarations":[{"languages":["swift"],"tokens":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"switch2","kind":"identifier"},{"text":": [","kind":"text"},{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","text":"Amiibo","kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService0A0V"},{"text":".","kind":"text"},{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game","text":"Game","kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService0A0V4GameV"},{"text":"]","kind":"text"}],"platforms":["macOS"]}],"kind":"declarations"}],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct\/switch2"},"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo/Game":{"fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Game","kind":"identifier"}],"title":"Amiibo.Game","type":"topic","abstract":[{"text":"A model that represents a game related to an amiibo.","type":"text"}],"role":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/game","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game","navigatorTitle":[{"text":"Game","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Platform-swift.struct/switch2":{"fragments":[{"text":"let","kind":"keyword"},{"kind":"text","text":" "},{"text":"switch2","kind":"identifier"},{"text":": [","kind":"text"},{"text":"Amiibo","preciseIdentifier":"s:13AmiiboService0A0V","kind":"typeIdentifier"},{"text":".","kind":"text"},{"text":"Game","preciseIdentifier":"s:13AmiiboService0A0V4GameV","kind":"typeIdentifier"},{"kind":"text","text":"]"}],"kind":"symbol","role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct\/switch2","abstract":[{"text":"A list of ","type":"text"},{"code":"Switch 2","type":"codeVoice"},{"text":" games related to an amiibo.","type":"text"}],"url":"\/documentation\/amiiboservice\/amiibo\/platform-swift.struct\/switch2","type":"topic","title":"switch2"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Platform-swift.struct":{"kind":"symbol","abstract":[{"text":"A model that represents a collection of ","type":"text"},{"type":"codeVoice","code":"Switch"},{"text":", ","type":"text"},{"type":"codeVoice","code":"Switch 2"},{"type":"text","text":", "},{"type":"codeVoice","code":"3DS"},{"type":"text","text":", and "},{"type":"codeVoice","code":"Wii U"},{"text":" games related to an amiibo.","type":"text"}],"title":"Amiibo.Platform","role":"symbol","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Platform","kind":"identifier"}],"navigatorTitle":[{"text":"Platform","kind":"identifier"}],"url":"\/documentation\/amiiboservice\/amiibo\/platform-swift.struct","type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"texLine truncated
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"threeDS"},{"kind":"text","text":": ["},{"kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService0A0V","text":"Amiibo","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo"},{"kind":"text","text":"."},{"kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService0A0V4GameV","text":"Game","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game"},{"text":"]","kind":"text"}],"platforms":["macOS"],"languages":["swift"]}]}],"sections":[],"schemaVersion":{"patch":0,"major":0,"minor":3},"kind":"symbol","hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct"]]},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct\/threeDS"},"abstract":[{"text":"A list of ","type":"text"},{"code":"3DS","type":"codeVoice"},{"text":" games related to an amiibo.","type":"text"}],"metadata":{"fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"threeDS","kind":"identifier"},{"text":": [","kind":"text"},{"text":"Amiibo","kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService0A0V"},{"text":".","kind":"text"},{"text":"Game","kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService0A0V4GameV"},{"text":"]","kind":"text"}],"symbolKind":"property","modules":[{"name":"AmiiboService"}],"role":"symbol","externalID":"s:13AmiiboService0A0V8PlatformV7threeDSSayAC4GameVGvp","roleHeading":"Instance Property","title":"threeDS"},"variants":[{"paths":["\/documentation\/amiiboservice\/amiibo\/platform-swift.struct\/threeds"],"traits":[{"interfaceLanguage":"swift"}]}],"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo/Platform-swift.struct":{"kind":"symbol","abstract":[{"text":"A model that represents a collection of ","type":"text"},{"type":"codeVoice","code":"Switch"},{"text":", ","type":"text"},{"type":"codeVoice","code":"Switch 2"},{"type":"text","text":", "},{"type":"codeVoice","code":"3DS"},{"type":"text","text":", and "},{"type":"codeVoice","code":"Wii U"},{"text":" games related to an amiibo.","type":"text"}],"title":"Amiibo.Platform","role":"symbol","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Platform","kind":"identifier"}],"navigatorTitle":[{"text":"Platform","kind":"identifier"}],"url":"\/documentation\/amiiboservice\/amiibo\/platform-swift.struct","type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Game":{"fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Game","kind":"identifier"}],"title":"Amiibo.Game","type":"topic","abstract":[{"text":"A model that represents a game related to an amiibo.","type":"text"}],"role":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/game","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game","navigatorTitle":[{"text":"Game","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Platform-swift.struct/threeDS":{"kind":"symbol","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"threeDS"},{"kind":"text","text":": ["},{"kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService0A0V","text":"Amiibo"},{"kind":"text","text":"."},{"kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService0A0V4GameV","text":"Game"},{"kind":"text","text":"]"}],"abstract":[{"text":"A list of ","type":"text"},{"code":"3DS","type":"codeVoice"},{"text":" games related to an amiibo.","type":"text"}],"url":"\/documentation\/amiiboservice\/amiibo\/platform-swift.struct\/threeds","type":"Line truncated
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"kind":"symbol","abstract":[{"text":"A list of ","type":"text"},{"type":"codeVoice","code":"Wii U"},{"text":" games related to an amiibo.","type":"text"}],"primaryContentSections":[{"declarations":[{"platforms":["macOS"],"languages":["swift"],"tokens":[{"kind":"keyword","text":"let"},{"text":" ","kind":"text"},{"kind":"identifier","text":"wiiU"},{"text":": [","kind":"text"},{"kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService0A0V","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","text":"Amiibo"},{"text":".","kind":"text"},{"preciseIdentifier":"s:13AmiiboService0A0V4GameV","text":"Game","kind":"typeIdentifier","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game"},{"text":"]","kind":"text"}]}],"kind":"declarations"}],"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct"]]},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiibo\/platform-swift.struct\/wiiu"]}],"metadata":{"symbolKind":"property","modules":[{"name":"AmiiboService"}],"title":"wiiU","roleHeading":"Instance Property","externalID":"s:13AmiiboService0A0V8PlatformV4wiiUSayAC4GameVGvp","role":"symbol","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"wiiU"},{"kind":"text","text":": ["},{"text":"Amiibo","preciseIdentifier":"s:13AmiiboService0A0V","kind":"typeIdentifier"},{"text":".","kind":"text"},{"text":"Game","preciseIdentifier":"s:13AmiiboService0A0V4GameV","kind":"typeIdentifier"},{"text":"]","kind":"text"}]},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct\/wiiU"},"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo/Platform-swift.struct":{"kind":"symbol","abstract":[{"text":"A model that represents a collection of ","type":"text"},{"type":"codeVoice","code":"Switch"},{"text":", ","type":"text"},{"type":"codeVoice","code":"Switch 2"},{"type":"text","text":", "},{"type":"codeVoice","code":"3DS"},{"type":"text","text":", and "},{"type":"codeVoice","code":"Wii U"},{"text":" games related to an amiibo.","type":"text"}],"title":"Amiibo.Platform","role":"symbol","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Platform","kind":"identifier"}],"navigatorTitle":[{"text":"Platform","kind":"identifier"}],"url":"\/documentation\/amiiboservice\/amiibo\/platform-swift.struct","type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct"},"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"kind":"symbol","abstract":[{"type":"text","text":"A model that represents an amiibo."}],"title":"Amiibo","role":"symbol","fragments":[{"text":"struct","kind":"keyword"},{"kind":"text","text":" "},{"kind":"identifier","text":"Amiibo"}],"navigatorTitle":[{"text":"Amiibo","kind":"identifier"}],"url":"\/documentation\/amiiboservice\/amiibo","type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Game":{"fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Game","kind":"identifier"}],"title":"Amiibo.Game","type":"topic","abstract":[{"text":"A model that represents a game related to an amiibo.","type":"text"}],"role":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/game","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game","navigatorTitle":[{"text":"Game","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Platform-swift.struct/wiiU":{"url":"\/documentation\/amiiboservice\/amiibo\/platform-swift.struct\/wiiu","kind":"symbol","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"wiiU","kind":"identifier"},{"text":": [","kind":"text"},{"text":"Amiibo","kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService0A0V"},{"text":".","kind":"text"},{"text":"Game","preciseIdentifier":"s:13AmiiboService0A0V4GameV","kind":"typeIdentifier"},{"text":"]","kind":"text"}],"abstract":[{"text":"A list of ","type":"text"},{"type":"codeVoice","code":"Wii U"},{"type":"text","text":" games related to an amiibo."}],"type":"topic","identifier":"doLine truncated
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"platforms":["macOS"],"tokens":[{"text":"let","kind":"keyword"},{"kind":"text","text":" "},{"kind":"identifier","text":"release"},{"kind":"text","text":": "},{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","preciseIdentifier":"s:13AmiiboService0A0V","kind":"typeIdentifier","text":"Amiibo"},{"kind":"text","text":"."},{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct","preciseIdentifier":"s:13AmiiboService0A0V7ReleaseV","kind":"typeIdentifier","text":"Release"}],"languages":["swift"]}]}],"schemaVersion":{"minor":3,"major":0,"patch":0},"sections":[],"kind":"symbol","hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo"]]},"identifier":{"url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/release-swift.property","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The release dates of this amiibo across different regions."}],"metadata":{"roleHeading":"Instance Property","externalID":"s:13AmiiboService0A0V7releaseAC7ReleaseVvp","modules":[{"name":"AmiiboService"}],"symbolKind":"property","fragments":[{"text":"let","kind":"keyword"},{"kind":"text","text":" "},{"text":"release","kind":"identifier"},{"kind":"text","text":": "},{"preciseIdentifier":"s:13AmiiboService0A0V","text":"Amiibo","kind":"typeIdentifier"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"Release","preciseIdentifier":"s:13AmiiboService0A0V7ReleaseV"}],"role":"symbol","title":"release"},"variants":[{"paths":["\/documentation\/amiiboservice\/amiibo\/release-swift.property"],"traits":[{"interfaceLanguage":"swift"}]}],"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo/Release-swift.struct":{"abstract":[{"type":"text","text":"A model that represents the regional release dates of an amiibo."}],"navigatorTitle":[{"text":"Release","kind":"identifier"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct","type":"topic","title":"Amiibo.Release","url":"\/documentation\/amiiboservice\/amiibo\/release-swift.struct","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Release","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/release-swift.property":{"role":"symbol","kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/release-swift.property","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"release","kind":"identifier"},{"text":": ","kind":"text"},{"text":"Amiibo","kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService0A0V"},{"text":".","kind":"text"},{"text":"Release","kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService0A0V7ReleaseV"}],"title":"release","url":"\/documentation\/amiiboservice\/amiibo\/release-swift.property","type":"topic","abstract":[{"text":"The release dates of this amiibo across different regions.","type":"text"}]}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"schemaVersion":{"minor":3,"major":0,"patch":0},"abstract":[{"type":"text","text":"A model that represents the regional release dates of an amiibo."}],"relationshipsSections":[{"identifiers":["doc:\/\/AmiiboService\/SQ","doc:\/\/AmiiboService\/SH","doc:\/\/AmiiboService\/s8SendableP","doc:\/\/AmiiboService\/s16SendableMetatypeP"],"type":"conformsTo","kind":"relationships","title":"Conforms To"}],"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo"]]},"seeAlsoSections":[{"identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage"],"generated":true,"anchor":"Nested-Models","title":"Nested Models"}],"variants":[{"paths":["\/documentation\/amiiboservice\/amiibo\/release-swift.struct"],"traits":[{"interfaceLanguage":"swift"}]}],"sections":[],"kind":"symbol","metadata":{"roleHeading":"Structure","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Release","kind":"identifier"}],"title":"Amiibo.Release","modules":[{"name":"AmiiboService"}],"role":"symbol","symbolKind":"struct","navigatorTitle":[{"text":"Release","kind":"identifier"}],"externalID":"s:13AmiiboService0A0V7ReleaseV","extendedModule":"AmiiboService"},"topicSections":[{"identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct\/america","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct\/australia","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct\/europe","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct\/japan"],"generated":true,"anchor":"Instance-Properties","title":"Instance Properties"},{"identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct\/Equatable-Implementations"],"generated":true,"anchor":"Default-Implementations","title":"Default Implementations"}],"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Release","kind":"identifier"}],"languages":["swift"],"platforms":["macOS"]}]}],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct"},"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Release-swift.struct/america":{"fragments":[{"kind":"keyword","text":"let"},{"text":" ","kind":"text"},{"text":"america","kind":"identifier"},{"text":": ","kind":"text"},{"kind":"typeIdentifier","preciseIdentifier":"s:10Foundation4DateV","text":"Date"},{"kind":"text","text":"?"}],"type":"topic","kind":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/release-swift.struct\/america","abstract":[{"type":"text","text":"A release date for North America, if any."}],"role":"symbol","title":"america","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct\/america"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Game":{"fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Game","kind":"identifier"}],"title":"Amiibo.Game","type":"topic","abstract":[{"text":"A model that represents a game related to an amiibo.","type":"text"}],"role":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/game","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game","navigatorTitle":[{"text":"Game","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Release-swift.struct/japan":{"abstract":[{"type":"text","text":"A release date for Japan, if any."}],"fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"japan"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"s:10Foundation4DateV","text":"Date"},{"kind":"text","text":"?"}],"title":"japan","role":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/release-swift.struct\/japan","type":"topic","kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct\/japan"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Release-swift.struct/australia":{"role":"symbol","kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiibLine truncated
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"primaryContentSections":[{"declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"text":"(","kind":"text"},{"kind":"internalParam","text":"lhs"},{"text":": ","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":", ","kind":"text"},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"text":") -> ","kind":"text"},{"text":"Bool","kind":"typeIdentifier","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}],"kind":"declarations"},{"kind":"parameters","parameters":[{"name":"lhs","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"A value to compare."}]}]},{"name":"rhs","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Another value to compare."}]}]}]},{"kind":"content","content":[{"anchor":"discussion","type":"heading","text":"Discussion","level":2},{"inlineContent":[{"text":"Inequality is the inverse of equality. For any values ","type":"text"},{"code":"a","type":"codeVoice"},{"text":" and ","type":"text"},{"code":"b","type":"codeVoice"},{"text":", ","type":"text"},{"code":"a != b","type":"codeVoice"},{"text":" ","type":"text"},{"text":"implies that ","type":"text"},{"code":"a == b","type":"codeVoice"},{"text":" is ","type":"text"},{"code":"false","type":"codeVoice"},{"text":".","type":"text"}],"type":"paragraph"},{"inlineContent":[{"type":"text","text":"This is the default implementation of the not-equal-to operator ("},{"type":"codeVoice","code":"!="},{"text":")","type":"text"},{"text":" ","type":"text"},{"type":"text","text":"for any type that conforms to "},{"type":"codeVoice","code":"Equatable"},{"text":".","type":"text"}],"type":"paragraph"}]}],"schemaVersion":{"minor":3,"patch":0,"major":0},"kind":"symbol","sections":[],"identifier":{"url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct\/!=(_:_:)","interfaceLanguage":"swift"},"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct"]]},"abstract":[{"type":"text","text":"Returns a Boolean value indicating whether two values are not equal."}],"metadata":{"roleHeading":"Operator","externalID":"s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::s:13AmiiboService0A0V7ReleaseV","extendedModule":"Swift","modules":[{"name":"AmiiboService","relatedModules":["Swift"]}],"symbolKind":"op","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"text":"(","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":", ","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":") -> ","kind":"text"},{"text":"Bool","preciseIdentifier":"s:Sb","kind":"typeIdentifier"}],"role":"symbol","title":"!=(_:_:)"},"variants":[{"paths":["\/documentation\/amiiboservice\/amiibo\/release-swift.struct\/!=(_:_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"references":{"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Release-swift.struct":{"abstract":[{"type":"text","text":"A model that represents the regional release dates of an amiibo."}],"navigatorTitle":[{"text":"Release","kind":"identifier"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct","type":"topic","title":"Amiibo.Release","url":"\/documentation\/amiiboservice\/amiibo\/release-swift.struct","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Release","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Release-swift.struct/!=(_:_:)":{"abstract":[{"type":"text","text":"Returns a Boolean value indicating whether two values are not equal."}],"fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"title":"!=(_:_:)","role":"symbol","type":"topic","url":"\/docuLine truncated
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"metadata":{"symbolKind":"property","modules":[{"name":"AmiiboService"}],"title":"america","roleHeading":"Instance Property","externalID":"s:13AmiiboService0A0V7ReleaseV7america10Foundation4DateVSgvp","role":"symbol","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"america"},{"kind":"text","text":": "},{"preciseIdentifier":"s:10Foundation4DateV","text":"Date","kind":"typeIdentifier"},{"text":"?","kind":"text"}]},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiibo\/release-swift.struct\/america"]}],"sections":[],"schemaVersion":{"minor":3,"patch":0,"major":0},"identifier":{"url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct\/america","interfaceLanguage":"swift"},"kind":"symbol","abstract":[{"type":"text","text":"A release date for North America, if any."}],"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct"]]},"primaryContentSections":[{"kind":"declarations","declarations":[{"platforms":["macOS"],"tokens":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"america","kind":"identifier"},{"text":": ","kind":"text"},{"preciseIdentifier":"s:10Foundation4DateV","text":"Date","kind":"typeIdentifier"},{"kind":"text","text":"?"}],"languages":["swift"]}]}],"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo/Release-swift.struct":{"abstract":[{"type":"text","text":"A model that represents the regional release dates of an amiibo."}],"navigatorTitle":[{"text":"Release","kind":"identifier"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct","type":"topic","title":"Amiibo.Release","url":"\/documentation\/amiiboservice\/amiibo\/release-swift.struct","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Release","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"text":"Amiibo","kind":"identifier"}],"type":"topic","navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"kind":"symbol","url":"\/documentation\/amiiboservice\/amiibo","abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"role":"symbol","title":"Amiibo","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Release-swift.struct/america":{"fragments":[{"kind":"keyword","text":"let"},{"text":" ","kind":"text"},{"text":"america","kind":"identifier"},{"text":": ","kind":"text"},{"kind":"typeIdentifier","preciseIdentifier":"s:10Foundation4DateV","text":"Date"},{"kind":"text","text":"?"}],"type":"topic","kind":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/release-swift.struct\/america","abstract":[{"type":"text","text":"A release date for North America, if any."}],"role":"symbol","title":"america","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct\/america"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"kind":"symbol","metadata":{"modules":[{"name":"AmiiboService"}],"externalID":"s:13AmiiboService0A0V7ReleaseV9australia10Foundation4DateVSgvp","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"australia","kind":"identifier"},{"text":": ","kind":"text"},{"text":"Date","kind":"typeIdentifier","preciseIdentifier":"s:10Foundation4DateV"},{"text":"?","kind":"text"}],"role":"symbol","title":"australia","symbolKind":"property","roleHeading":"Instance Property"},"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct"]]},"primaryContentSections":[{"kind":"declarations","declarations":[{"platforms":["macOS"],"tokens":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"australia","kind":"identifier"},{"text":": ","kind":"text"},{"text":"Date","kind":"typeIdentifier","preciseIdentifier":"s:10Foundation4DateV"},{"text":"?","kind":"text"}],"languages":["swift"]}]}],"variants":[{"paths":["\/documentation\/amiiboservice\/amiibo\/release-swift.struct\/australia"],"traits":[{"interfaceLanguage":"swift"}]}],"abstract":[{"type":"text","text":"A release date for Australia, if any."}],"schemaVersion":{"patch":0,"minor":3,"major":0},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct\/australia"},"sections":[],"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Release-swift.struct":{"abstract":[{"type":"text","text":"A model that represents the regional release dates of an amiibo."}],"navigatorTitle":[{"text":"Release","kind":"identifier"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct","type":"topic","title":"Amiibo.Release","url":"\/documentation\/amiiboservice\/amiibo\/release-swift.struct","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Release","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Release-swift.struct/australia":{"role":"symbol","kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct\/australia","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"australia","kind":"identifier"},{"text":": ","kind":"text"},{"text":"Date","kind":"typeIdentifier","preciseIdentifier":"s:10Foundation4DateV"},{"text":"?","kind":"text"}],"title":"australia","type":"topic","url":"\/documentation\/amiiboservice\/amiibo\/release-swift.struct\/australia","abstract":[{"type":"text","text":"A release date for Australia, if any."}]}}}
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
{"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiibo\/release-swift.struct\/equatable-implementations"]}],"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct"]]},"topicSections":[{"identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct\/!=(_:_:)"],"generated":true,"title":"Operators","anchor":"Operators"}],"schemaVersion":{"minor":3,"major":0,"patch":0},"identifier":{"url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct\/Equatable-Implementations","interfaceLanguage":"swift"},"metadata":{"role":"collectionGroup","roleHeading":"API Collection","title":"Equatable Implementations","modules":[{"name":"AmiiboService"}]},"kind":"article","sections":[],"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo/Release-swift.struct":{"abstract":[{"type":"text","text":"A model that represents the regional release dates of an amiibo."}],"navigatorTitle":[{"text":"Release","kind":"identifier"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct","type":"topic","title":"Amiibo.Release","url":"\/documentation\/amiiboservice\/amiibo\/release-swift.struct","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Release","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Release-swift.struct/!=(_:_:)":{"abstract":[{"type":"text","text":"Returns a Boolean value indicating whether two values are not equal."}],"fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"title":"!=(_:_:)","role":"symbol","type":"topic","url":"\/documentation\/amiiboservice\/amiibo\/release-swift.struct\/!=(_:_:)","kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct\/!=(_:_:)"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"platforms":["macOS"],"tokens":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"europe"},{"kind":"text","text":": "},{"text":"Date","preciseIdentifier":"s:10Foundation4DateV","kind":"typeIdentifier"},{"text":"?","kind":"text"}],"languages":["swift"]}]}],"kind":"symbol","schemaVersion":{"patch":0,"minor":3,"major":0},"sections":[],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct\/europe"},"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct"]]},"abstract":[{"type":"text","text":"A release date for Europe, if any."}],"metadata":{"fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"europe","kind":"identifier"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"s:10Foundation4DateV","text":"Date"},{"kind":"text","text":"?"}],"symbolKind":"property","role":"symbol","modules":[{"name":"AmiiboService"}],"externalID":"s:13AmiiboService0A0V7ReleaseV6europe10Foundation4DateVSgvp","roleHeading":"Instance Property","title":"europe"},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiibo\/release-swift.struct\/europe"]}],"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo/Release-swift.struct":{"abstract":[{"type":"text","text":"A model that represents the regional release dates of an amiibo."}],"navigatorTitle":[{"text":"Release","kind":"identifier"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct","type":"topic","title":"Amiibo.Release","url":"\/documentation\/amiiboservice\/amiibo\/release-swift.struct","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Release","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Release-swift.struct/europe":{"fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"europe"},{"kind":"text","text":": "},{"preciseIdentifier":"s:10Foundation4DateV","kind":"typeIdentifier","text":"Date"},{"kind":"text","text":"?"}],"kind":"symbol","role":"symbol","abstract":[{"text":"A release date for Europe, if any.","type":"text"}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct\/europe","url":"\/documentation\/amiiboservice\/amiibo\/release-swift.struct\/europe","type":"topic","title":"europe"},"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"metadata":{"modules":[{"name":"AmiiboService"}],"externalID":"s:13AmiiboService0A0V7ReleaseV5japan10Foundation4DateVSgvp","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"japan","kind":"identifier"},{"text":": ","kind":"text"},{"text":"Date","kind":"typeIdentifier","preciseIdentifier":"s:10Foundation4DateV"},{"text":"?","kind":"text"}],"role":"symbol","title":"japan","symbolKind":"property","roleHeading":"Instance Property"},"kind":"symbol","hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct"]]},"primaryContentSections":[{"declarations":[{"platforms":["macOS"],"tokens":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"japan"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"s:10Foundation4DateV","text":"Date"},{"kind":"text","text":"?"}],"languages":["swift"]}],"kind":"declarations"}],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiibo\/release-swift.struct\/japan"]}],"abstract":[{"type":"text","text":"A release date for Japan, if any."}],"schemaVersion":{"minor":3,"major":0,"patch":0},"identifier":{"url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct\/japan","interfaceLanguage":"swift"},"sections":[],"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Release-swift.struct/japan":{"abstract":[{"type":"text","text":"A release date for Japan, if any."}],"fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"japan"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"s:10Foundation4DateV","text":"Date"},{"kind":"text","text":"?"}],"title":"japan","role":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/release-swift.struct\/japan","type":"topic","kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct\/japan"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Release-swift.struct":{"abstract":[{"type":"text","text":"A model that represents the regional release dates of an amiibo."}],"navigatorTitle":[{"text":"Release","kind":"identifier"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct","type":"topic","title":"Amiibo.Release","url":"\/documentation\/amiiboservice\/amiibo\/release-swift.struct","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Release","kind":"identifier"}],"kind":"symbol"}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"kind":"symbol","abstract":[{"text":"The name of the amiibo series this amiibo belongs to.","type":"text"}],"primaryContentSections":[{"declarations":[{"languages":["swift"],"tokens":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"series"},{"kind":"text","text":": "},{"preciseIdentifier":"s:SS","text":"String","kind":"typeIdentifier"}],"platforms":["macOS"]}],"kind":"declarations"}],"schemaVersion":{"minor":3,"major":0,"patch":0},"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo"]]},"metadata":{"role":"symbol","symbolKind":"property","externalID":"s:13AmiiboService0A0V6seriesSSvp","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"series"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"s:SS","text":"String"}],"title":"series","modules":[{"name":"AmiiboService"}],"roleHeading":"Instance Property"},"sections":[],"identifier":{"url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/series","interfaceLanguage":"swift"},"variants":[{"paths":["\/documentation\/amiiboservice\/amiibo\/series"],"traits":[{"interfaceLanguage":"swift"}]}],"references":{"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"},"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"type":"topic","role":"symbol","fragments":[{"text":"struct","kind":"keyword"},{"kind":"text","text":" "},{"text":"Amiibo","kind":"identifier"}],"url":"\/documentation\/amiiboservice\/amiibo","abstract":[{"type":"text","text":"A model that represents an amiibo."}],"title":"Amiibo","kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/series":{"url":"\/documentation\/amiiboservice\/amiibo\/series","type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/series","role":"symbol","title":"series","abstract":[{"type":"text","text":"The name of the amiibo series this amiibo belongs to."}],"kind":"symbol","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"series","kind":"identifier"},{"text":": ","kind":"text"},{"preciseIdentifier":"s:SS","text":"String","kind":"typeIdentifier"}]}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"primaryContentSections":[{"declarations":[{"tokens":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"tail","kind":"identifier"},{"text":": ","kind":"text"},{"preciseIdentifier":"s:SS","text":"String","kind":"typeIdentifier"}],"languages":["swift"],"platforms":["macOS"]}],"kind":"declarations"}],"schemaVersion":{"patch":0,"major":0,"minor":3},"kind":"symbol","sections":[],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/tail"},"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo"]]},"abstract":[{"type":"text","text":"The last 8 hexadecimal characters of the amiibo identifier."}],"metadata":{"fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"tail","kind":"identifier"},{"text":": ","kind":"text"},{"text":"String","kind":"typeIdentifier","preciseIdentifier":"s:SS"}],"symbolKind":"property","modules":[{"name":"AmiiboService"}],"role":"symbol","externalID":"s:13AmiiboService0A0V4tailSSvp","roleHeading":"Instance Property","title":"tail"},"variants":[{"paths":["\/documentation\/amiiboservice\/amiibo\/tail"],"traits":[{"interfaceLanguage":"swift"}]}],"references":{"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/tail":{"abstract":[{"text":"The last 8 hexadecimal characters of the amiibo identifier.","type":"text"}],"fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"tail"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"title":"tail","role":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/tail","type":"topic","kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/tail"},"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"schemaVersion":{"patch":0,"minor":3,"major":0},"abstract":[{"type":"text","text":"The type of this amiibo (e.g., Figure, Card, Yarn, Band)."}],"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo"]]},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiibo\/type"]}],"metadata":{"roleHeading":"Instance Property","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"type","kind":"identifier"},{"text":": ","kind":"text"},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}],"title":"type","modules":[{"name":"AmiiboService"}],"role":"symbol","symbolKind":"property","externalID":"s:13AmiiboService0A0V4typeSSvp"},"kind":"symbol","sections":[],"primaryContentSections":[{"kind":"declarations","declarations":[{"platforms":["macOS"],"tokens":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"type"},{"kind":"text","text":": "},{"preciseIdentifier":"s:SS","text":"String","kind":"typeIdentifier"}],"languages":["swift"]}]}],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/type"},"references":{"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"},"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/type":{"role":"symbol","kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/type","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"type","kind":"identifier"},{"text":": ","kind":"text"},{"text":"String","preciseIdentifier":"s:SS","kind":"typeIdentifier"}],"title":"type","url":"\/documentation\/amiiboservice\/amiibo\/type","type":"topic","abstract":[{"text":"The type of this amiibo (e.g., Figure, Card, Yarn, Band).","type":"text"}]}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"primaryContentSections":[{"declarations":[{"tokens":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Usage","kind":"identifier"}],"platforms":["macOS"],"languages":["swift"]}],"kind":"declarations"}],"metadata":{"roleHeading":"Structure","externalID":"s:13AmiiboService0A0V5UsageV","extendedModule":"AmiiboService","navigatorTitle":[{"text":"Usage","kind":"identifier"}],"modules":[{"name":"AmiiboService"}],"symbolKind":"struct","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Usage","kind":"identifier"}],"role":"symbol","title":"Amiibo.Usage"},"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo"]]},"abstract":[{"text":"A model that represents the usage of an amiibo within a certain game.","type":"text"}],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiibo\/usage"]}],"kind":"symbol","schemaVersion":{"minor":3,"patch":0,"major":0},"topicSections":[{"anchor":"Instance-Properties","identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage\/explanation","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage\/isWriteable"],"title":"Instance Properties","generated":true},{"anchor":"Default-Implementations","identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage\/Equatable-Implementations"],"title":"Default Implementations","generated":true}],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage"},"sections":[],"relationshipsSections":[{"kind":"relationships","title":"Conforms To","type":"conformsTo","identifiers":["doc:\/\/AmiiboService\/SQ","doc:\/\/AmiiboService\/SH","doc:\/\/AmiiboService\/s8SendableP","doc:\/\/AmiiboService\/s16SendableMetatypeP"]}],"seeAlsoSections":[{"identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Platform-swift.struct","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Release-swift.struct"],"anchor":"Nested-Models","title":"Nested Models","generated":true}],"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Game":{"fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Game","kind":"identifier"}],"title":"Amiibo.Game","type":"topic","abstract":[{"text":"A model that represents a game related to an amiibo.","type":"text"}],"role":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/game","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Game","navigatorTitle":[{"text":"Game","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/SH":{"title":"Swift.Hashable","type":"unresolvable","identifier":"doc:\/\/AmiiboService\/SH"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Usage":{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"Usage"}],"title":"Amiibo.Usage","role":"symbol","type":"topic","url":"\/documentation\/amiiboservice\/amiibo\/usage","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"Usage"}],"abstract":[{"type":"text","text":"A model that represents the usage of an amiibo within a certain game."}]},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Platform-swift.struct":{"kind":"symbol","abstract":[{"text":"A model that represents a collection of ","type":"text"},{"type":"codeVoice","code":"Switch"},{"text":", ","type":"text"},{"type":"codeVoice","code":"Switch 2"},{"type":"text","text":", "},{"type":"codeVoice","code":"3DS"},{"type":"text","text":", and "},{"type":"codeVoice","code":"Wii U"},{"text":" games related to an amiibo.","type":"text"}],"title":"Amiibo.Platform","role":"symbol","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Platform","kind":"ideLine truncated
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"metadata":{"modules":[{"name":"AmiiboService","relatedModules":["Swift"]}],"externalID":"s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::s:13AmiiboService0A0V5UsageV","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"extendedModule":"Swift","role":"symbol","title":"!=(_:_:)","symbolKind":"op","roleHeading":"Operator"},"kind":"symbol","hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage"]]},"primaryContentSections":[{"kind":"declarations","declarations":[{"languages":["swift"],"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"internalParam","text":"lhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"internalParam","text":"rhs"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"platforms":["macOS"]}]},{"parameters":[{"name":"lhs","content":[{"inlineContent":[{"type":"text","text":"A value to compare."}],"type":"paragraph"}]},{"name":"rhs","content":[{"inlineContent":[{"text":"Another value to compare.","type":"text"}],"type":"paragraph"}]}],"kind":"parameters"},{"content":[{"text":"Discussion","type":"heading","level":2,"anchor":"discussion"},{"type":"paragraph","inlineContent":[{"type":"text","text":"Inequality is the inverse of equality. For any values "},{"type":"codeVoice","code":"a"},{"type":"text","text":" and "},{"type":"codeVoice","code":"b"},{"type":"text","text":", "},{"type":"codeVoice","code":"a != b"},{"type":"text","text":" "},{"type":"text","text":"implies that "},{"type":"codeVoice","code":"a == b"},{"type":"text","text":" is "},{"type":"codeVoice","code":"false"},{"type":"text","text":"."}]},{"type":"paragraph","inlineContent":[{"text":"This is the default implementation of the not-equal-to operator (","type":"text"},{"code":"!=","type":"codeVoice"},{"text":")","type":"text"},{"text":" ","type":"text"},{"text":"for any type that conforms to ","type":"text"},{"code":"Equatable","type":"codeVoice"},{"text":".","type":"text"}]}],"kind":"content"}],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiibo\/usage\/!=(_:_:)"]}],"abstract":[{"type":"text","text":"Returns a Boolean value indicating whether two values are not equal."}],"schemaVersion":{"minor":3,"major":0,"patch":0},"identifier":{"url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage\/!=(_:_:)","interfaceLanguage":"swift"},"sections":[],"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Usage/!=(_:_:)":{"type":"topic","abstract":[{"type":"text","text":"Returns a Boolean value indicating whether two values are not equal."}],"url":"\/documentation\/amiiboservice\/amiibo\/usage\/!=(_:_:)","kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage\/!=(_:_:)","fragments":[{"text":"static","kind":"keyword"},{"text":" ","kind":"text"},{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"!=","kind":"identifier"},{"text":" ","kind":"text"},{"text":"(","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":", ","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":") -> ","kind":"text"},{"preciseIdentifier":"s:Sb","text":"Bool","kind":"typeIdentifier"}],"role":"symbol","title":"!=(_:_:)"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Usage":{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"Usage"}],"title":"Amiibo.Usage","role":"symbol","type":"topic","url":"\/documentation\/amiiboservice\/amiibo\/usage","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"Usage"}],"abstract":[{"type":"text","texLine truncated
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"schemaVersion":{"minor":3,"patch":0,"major":0},"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage"]]},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiibo\/usage\/equatable-implementations"]}],"sections":[],"metadata":{"roleHeading":"API Collection","modules":[{"name":"AmiiboService"}],"role":"collectionGroup","title":"Equatable Implementations"},"kind":"article","topicSections":[{"identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage\/!=(_:_:)"],"anchor":"Operators","title":"Operators","generated":true}],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage\/Equatable-Implementations"},"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo/Usage/!=(_:_:)":{"type":"topic","abstract":[{"type":"text","text":"Returns a Boolean value indicating whether two values are not equal."}],"url":"\/documentation\/amiiboservice\/amiibo\/usage\/!=(_:_:)","kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage\/!=(_:_:)","fragments":[{"text":"static","kind":"keyword"},{"text":" ","kind":"text"},{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"!=","kind":"identifier"},{"text":" ","kind":"text"},{"text":"(","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":", ","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":") -> ","kind":"text"},{"preciseIdentifier":"s:Sb","text":"Bool","kind":"typeIdentifier"}],"role":"symbol","title":"!=(_:_:)"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Usage":{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"Usage"}],"title":"Amiibo.Usage","role":"symbol","type":"topic","url":"\/documentation\/amiiboservice\/amiibo\/usage","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"Usage"}],"abstract":[{"type":"text","text":"A model that represents the usage of an amiibo within a certain game."}]},"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"metadata":{"modules":[{"name":"AmiiboService"}],"externalID":"s:13AmiiboService0A0V5UsageV11explanationSSvp","fragments":[{"text":"let","kind":"keyword"},{"kind":"text","text":" "},{"text":"explanation","kind":"identifier"},{"text":": ","kind":"text"},{"text":"String","kind":"typeIdentifier","preciseIdentifier":"s:SS"}],"role":"symbol","title":"explanation","symbolKind":"property","roleHeading":"Instance Property"},"kind":"symbol","hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage"]]},"primaryContentSections":[{"kind":"declarations","declarations":[{"platforms":["macOS"],"languages":["swift"],"tokens":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"explanation","kind":"identifier"},{"kind":"text","text":": "},{"preciseIdentifier":"s:SS","kind":"typeIdentifier","text":"String"}]}]}],"variants":[{"paths":["\/documentation\/amiiboservice\/amiibo\/usage\/explanation"],"traits":[{"interfaceLanguage":"swift"}]}],"abstract":[{"text":"A description of how the amiibo is used within the game.","type":"text"}],"schemaVersion":{"patch":0,"major":0,"minor":3},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage\/explanation"},"sections":[],"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Usage/explanation":{"abstract":[{"type":"text","text":"A description of how the amiibo is used within the game."}],"fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"explanation","kind":"identifier"},{"text":": ","kind":"text"},{"preciseIdentifier":"s:SS","text":"String","kind":"typeIdentifier"}],"title":"explanation","role":"symbol","type":"topic","url":"\/documentation\/amiiboservice\/amiibo\/usage\/explanation","kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage\/explanation"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Usage":{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"Usage"}],"title":"Amiibo.Usage","role":"symbol","type":"topic","url":"\/documentation\/amiiboservice\/amiibo\/usage","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"Usage"}],"abstract":[{"type":"text","text":"A model that represents the usage of an amiibo within a certain game."}]}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"abstract":[{"text":"A flag that indicates whether the amiibo can save game data.","type":"text"}],"variants":[{"paths":["\/documentation\/amiiboservice\/amiibo\/usage\/iswriteable"],"traits":[{"interfaceLanguage":"swift"}]}],"kind":"symbol","identifier":{"url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage\/isWriteable","interfaceLanguage":"swift"},"metadata":{"roleHeading":"Instance Property","fragments":[{"text":"let","kind":"keyword"},{"kind":"text","text":" "},{"kind":"identifier","text":"isWriteable"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"s:Sb","text":"Bool"}],"title":"isWriteable","modules":[{"name":"AmiiboService"}],"role":"symbol","symbolKind":"property","externalID":"s:13AmiiboService0A0V5UsageV11isWriteableSbvp"},"schemaVersion":{"patch":0,"minor":3,"major":0},"sections":[],"primaryContentSections":[{"declarations":[{"tokens":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"isWriteable"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"s:Sb","text":"Bool"}],"platforms":["macOS"],"languages":["swift"]}],"kind":"declarations"}],"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage"]]},"references":{"doc://AmiiboService/documentation/AmiiboService/Amiibo/Usage/isWriteable":{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage\/isWriteable","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"isWriteable"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"s:Sb","text":"Bool"}],"title":"isWriteable","role":"symbol","url":"\/documentation\/amiiboservice\/amiibo\/usage\/iswriteable","type":"topic","kind":"symbol","abstract":[{"type":"text","text":"A flag that indicates whether the amiibo can save game data."}]},"doc://AmiiboService/documentation/AmiiboService/Amiibo/Usage":{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo\/Usage","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"Usage"}],"title":"Amiibo.Usage","role":"symbol","type":"topic","url":"\/documentation\/amiiboservice\/amiibo\/usage","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"Usage"}],"abstract":[{"type":"text","text":"A model that represents the usage of an amiibo within a certain game."}]},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"},"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"abstract":[{"text":"A model that represents an amiibo.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","type":"topic","title":"Amiibo","url":"\/documentation\/amiiboservice\/amiibo","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"Amiibo","kind":"identifier"}],"kind":"symbol"}}}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"sections":[],"schemaVersion":{"patch":0,"minor":3,"major":0},"topicSections":[{"anchor":"Amiibo-endpoints","title":"Amiibo endpoints","identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient\/getAmiibos(by:)","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient\/getAmiiboSeries(by:)","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient\/getAmiiboTypes(by:)"]},{"anchor":"Game-endpoints","identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient\/getGameCharacters(by:)","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient\/getGameSeries(by:)"],"title":"Game endpoints"},{"anchor":"System-endpoints","title":"System endpoints","identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient\/getLastUpdated()"]}],"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService"]]},"identifier":{"url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient","interfaceLanguage":"swift"},"seeAlsoSections":[{"title":"Clients","identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboLiveClient"],"anchor":"Clients","generated":true}],"primaryContentSections":[{"declarations":[{"tokens":[{"text":"protocol","kind":"keyword"},{"text":" ","kind":"text"},{"text":"AmiiboClient","kind":"identifier"}],"platforms":["macOS"],"languages":["swift"]}],"kind":"declarations"}],"relationshipsSections":[{"kind":"relationships","identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboLiveClient"],"title":"Conforming Types","type":"conformingTypes"}],"metadata":{"symbolKind":"protocol","modules":[{"name":"AmiiboService"}],"title":"AmiiboClient","navigatorTitle":[{"kind":"identifier","text":"AmiiboClient"}],"roleHeading":"Protocol","externalID":"s:13AmiiboService0A6ClientP","role":"symbol","fragments":[{"text":"protocol","kind":"keyword"},{"kind":"text","text":" "},{"kind":"identifier","text":"AmiiboClient"}]},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiiboclient"]}],"kind":"symbol","abstract":[{"text":"A protocol that defines API clients containing all available endpoints to interact with.","type":"text"}],"references":{"doc://AmiiboService/documentation/AmiiboService/AmiiboClient/getAmiiboSeries(by:)":{"kind":"symbol","abstract":[{"type":"text","text":"Gets a list of amiibo series based on a given filter."}],"title":"getAmiiboSeries(by:)","role":"symbol","fragments":[{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"getAmiiboSeries","kind":"identifier"},{"text":"(","kind":"text"},{"kind":"externalParam","text":"by"},{"text":": ","kind":"text"},{"kind":"typeIdentifier","text":"AmiiboSeriesFilter","preciseIdentifier":"s:13AmiiboService0A12SeriesFilterV"},{"text":") ","kind":"text"},{"text":"async","kind":"keyword"},{"kind":"text","text":" "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> ["},{"kind":"typeIdentifier","text":"AmiiboSeries","preciseIdentifier":"s:13AmiiboService0A6SeriesV"},{"text":"]","kind":"text"}],"url":"\/documentation\/amiiboservice\/amiiboclient\/getamiiboseries(by:)","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient\/getAmiiboSeries(by:)","type":"topic","required":true},"doc://AmiiboService/documentation/AmiiboService/AmiiboClient/getAmiibos(by:)":{"required":true,"fragments":[{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"getAmiibos","kind":"identifier"},{"kind":"text","text":"("},{"kind":"externalParam","text":"by"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"AmiiboFilter","preciseIdentifier":"s:13AmiiboService0A6FilterV"},{"kind":"text","text":") "},{"kind":"keyword","text":"async"},{"kind":"text","text":" "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> ["},{"kind":"typeIdentifier","text":"Amiibo","preciseIdentifier":"s:13AmiiboService0A0V"},{"kind":"text","text":"]"}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient\/getAmiibos(by:)","type":"topic","title":"getAmiibos(by:)","abstract":[{"type":"text","text":"Gets a list of amiibo items based on a given filter."}],"kind":"symbol","role":"symbol","url":"\/documentation\/amiiboservice\/amiiboclient\/getamiibos(by:)"},"doc://AmiiboService/documentation/AmiiboService/AmiiboClient":{"navigatorTitle":[{"kind":"identifier","text":"AmiiboClient"}],"fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"AmiiboClient"}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient","type":"topic","title":"AmiiboClient","abstract":[{"type":"text","text":"A protocol that defines API clients containing all available endpoints to interact with."}],"kind":"symbol","role":"symbol","url":"\/documentation\/amiiboservice\/amiiboclient"},"doc://AmiiboService/documentation/AmiiboService/AmiiboClient/getGameSeries(by:)":{"identifier":"doc:\/\/AmiiboSerLine truncated
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"metadata":{"modules":[{"name":"AmiiboService"}],"externalID":"s:13AmiiboService0A6ClientP10getAmiibos2bySayAA0A0VGAA0A6FilterV_tYaKF","fragments":[{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"getAmiibos","kind":"identifier"},{"text":"(","kind":"text"},{"text":"by","kind":"externalParam"},{"text":": ","kind":"text"},{"text":"AmiiboFilter","kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService0A6FilterV"},{"text":") ","kind":"text"},{"text":"async","kind":"keyword"},{"text":" ","kind":"text"},{"text":"throws","kind":"keyword"},{"text":" -> [","kind":"text"},{"text":"Amiibo","kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService0A0V"},{"text":"]","kind":"text"}],"role":"symbol","required":true,"title":"getAmiibos(by:)","symbolKind":"method","roleHeading":"Instance Method"},"kind":"symbol","hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient"]]},"primaryContentSections":[{"kind":"declarations","declarations":[{"languages":["swift"],"platforms":["macOS"],"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"getAmiibos"},{"kind":"text","text":"("},{"kind":"externalParam","text":"by"},{"kind":"text","text":" "},{"kind":"internalParam","text":"filter"},{"kind":"text","text":": "},{"preciseIdentifier":"s:13AmiiboService0A6FilterV","kind":"typeIdentifier","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboFilter","text":"AmiiboFilter"},{"kind":"text","text":") "},{"kind":"keyword","text":"async"},{"kind":"text","text":" "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> ["},{"kind":"typeIdentifier","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","text":"Amiibo","preciseIdentifier":"s:13AmiiboService0A0V"},{"kind":"text","text":"]"}]}]},{"kind":"parameters","parameters":[{"content":[{"inlineContent":[{"type":"text","text":"A filter to remove unwanted items from the result."}],"type":"paragraph"}],"name":"filter"}]},{"content":[{"level":2,"anchor":"return-value","type":"heading","text":"Return Value"},{"inlineContent":[{"type":"text","text":"A list of filtered amiibo items."}],"type":"paragraph"}],"kind":"content"},{"content":[{"type":"heading","level":2,"text":"Discussion","anchor":"discussion"},{"type":"aside","content":[{"inlineContent":[{"type":"text","text":"An "},{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboServiceError","type":"reference","isActive":true},{"type":"text","text":" error in case some issue is encountered while generating the result."}],"type":"paragraph"}],"style":"note","name":"Throws"}],"kind":"content"}],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiiboclient\/getamiibos(by:)"]}],"abstract":[{"text":"Gets a list of amiibo items based on a given filter.","type":"text"}],"schemaVersion":{"patch":0,"minor":3,"major":0},"identifier":{"url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient\/getAmiibos(by:)","interfaceLanguage":"swift"},"seeAlsoSections":[{"anchor":"Amiibo-endpoints","title":"Amiibo endpoints","generated":true,"identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient\/getAmiiboSeries(by:)","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient\/getAmiiboTypes(by:)"]}],"sections":[],"references":{"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"},"doc://AmiiboService/documentation/AmiiboService/AmiiboClient":{"navigatorTitle":[{"kind":"identifier","text":"AmiiboClient"}],"fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"AmiiboClient"}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient","type":"topic","title":"AmiiboClient","abstract":[{"type":"text","text":"A protocol that defines API clients containing all available endpoints to interact with."}],"kind":"symbol","role":"symbol","url":"\/documentation\/amiiboservice\/amiiboclient"},"doc://AmiiboService/documentation/AmiiboService/AmiiboServiceError":{"abstract":[{"type":"text","text":"A representation of all the possible errors that the "},{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboService","isActive":true,"type":"reference"},{"text":" service could throw.","type":"text"}],"kind":"symbol","role":"symbol","url":"\/documentation\/amiiboservice\/amiiboserviceerror","fragments":[{"text":"enum","kind":"keyword"},{"text":" ","kind":"text"},{"text":"AmiiLine truncated
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"schemaVersion":{"minor":3,"major":0,"patch":0},"abstract":[{"type":"text","text":"Gets a list of amiibo series based on a given filter."}],"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient"]]},"seeAlsoSections":[{"title":"Amiibo endpoints","generated":true,"identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient\/getAmiibos(by:)","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient\/getAmiiboTypes(by:)"],"anchor":"Amiibo-endpoints"}],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiiboclient\/getamiiboseries(by:)"]}],"metadata":{"roleHeading":"Instance Method","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"getAmiiboSeries"},{"kind":"text","text":"("},{"kind":"externalParam","text":"by"},{"kind":"text","text":": "},{"preciseIdentifier":"s:13AmiiboService0A12SeriesFilterV","kind":"typeIdentifier","text":"AmiiboSeriesFilter"},{"kind":"text","text":") "},{"kind":"keyword","text":"async"},{"kind":"text","text":" "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> ["},{"preciseIdentifier":"s:13AmiiboService0A6SeriesV","kind":"typeIdentifier","text":"AmiiboSeries"},{"kind":"text","text":"]"}],"required":true,"title":"getAmiiboSeries(by:)","modules":[{"name":"AmiiboService"}],"role":"symbol","symbolKind":"method","externalID":"s:13AmiiboService0A6ClientP03getA6Series2bySayAA0aE0VGAA0aE6FilterV_tYaKF"},"kind":"symbol","sections":[],"primaryContentSections":[{"declarations":[{"languages":["swift"],"tokens":[{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"getAmiiboSeries","kind":"identifier"},{"text":"(","kind":"text"},{"text":"by","kind":"externalParam"},{"text":" ","kind":"text"},{"text":"filter","kind":"internalParam"},{"text":": ","kind":"text"},{"text":"AmiiboSeriesFilter","kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService0A12SeriesFilterV","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboSeriesFilter"},{"text":") ","kind":"text"},{"text":"async","kind":"keyword"},{"text":" ","kind":"text"},{"text":"throws","kind":"keyword"},{"text":" -> [","kind":"text"},{"kind":"typeIdentifier","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboSeries","text":"AmiiboSeries","preciseIdentifier":"s:13AmiiboService0A6SeriesV"},{"kind":"text","text":"]"}],"platforms":["macOS"]}],"kind":"declarations"},{"kind":"parameters","parameters":[{"content":[{"type":"paragraph","inlineContent":[{"text":"A filter to remove unwanted items from the result.","type":"text"}]}],"name":"filter"}]},{"kind":"content","content":[{"type":"heading","text":"Return Value","level":2,"anchor":"return-value"},{"inlineContent":[{"type":"text","text":"A list of filtered amiibo series."}],"type":"paragraph"}]},{"kind":"content","content":[{"type":"heading","level":2,"text":"Discussion","anchor":"discussion"},{"type":"aside","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"An "},{"type":"reference","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboServiceError","isActive":true},{"type":"text","text":" error in case some issue is encountered while generating the result."}]}],"style":"note","name":"Throws"}]}],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient\/getAmiiboSeries(by:)"},"references":{"doc://AmiiboService/documentation/AmiiboService/AmiiboSeriesFilter":{"type":"topic","abstract":[{"text":"A type that contains values to fine-tune a response when requesting amiibo series.","type":"text"}],"navigatorTitle":[{"kind":"identifier","text":"AmiiboSeriesFilter"}],"url":"\/documentation\/amiiboservice\/amiiboseriesfilter","kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboSeriesFilter","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"AmiiboSeriesFilter"}],"role":"symbol","title":"AmiiboSeriesFilter"},"doc://AmiiboService/documentation/AmiiboService/AmiiboClient/getAmiibos(by:)":{"required":true,"fragments":[{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"getAmiibos","kind":"identifier"},{"kind":"text","text":"("},{"kind":"externalParam","text":"by"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"AmiiboFilter","preciseIdentifier":"s:13AmiiboService0A6FilterV"},{"kind":"text","text":") "},{"kind":"keyword","text":"async"},{"kind":"text","text":" "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> ["},{"kind":"typeIdentifier","text":"Amiibo","preciseIdentifier":"s:13AmiiboService0A0V"},{"kind":"text","text":"]"}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient\/getAmiibos(by:)","type":"topic","title":"getAmiibos(by:)","abstract":[{"type":"text","text":"Gets a liLine truncated
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"schemaVersion":{"major":0,"minor":3,"patch":0},"abstract":[{"text":"Gets a list of amiibo types based on a given filter.","type":"text"}],"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient"]]},"seeAlsoSections":[{"anchor":"Amiibo-endpoints","generated":true,"title":"Amiibo endpoints","identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient\/getAmiibos(by:)","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient\/getAmiiboSeries(by:)"]}],"variants":[{"paths":["\/documentation\/amiiboservice\/amiiboclient\/getamiibotypes(by:)"],"traits":[{"interfaceLanguage":"swift"}]}],"sections":[],"metadata":{"roleHeading":"Instance Method","fragments":[{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"getAmiiboTypes","kind":"identifier"},{"text":"(","kind":"text"},{"text":"by","kind":"externalParam"},{"text":": ","kind":"text"},{"text":"AmiiboTypeFilter","kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService0A10TypeFilterV"},{"text":") ","kind":"text"},{"text":"async","kind":"keyword"},{"text":" ","kind":"text"},{"text":"throws","kind":"keyword"},{"text":" -> [","kind":"text"},{"text":"AmiiboType","kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService0A4TypeV"},{"text":"]","kind":"text"}],"required":true,"modules":[{"name":"AmiiboService"}],"title":"getAmiiboTypes(by:)","role":"symbol","symbolKind":"method","externalID":"s:13AmiiboService0A6ClientP03getA5Types2bySayAA0A4TypeVGAA0aG6FilterV_tYaKF"},"kind":"symbol","primaryContentSections":[{"kind":"declarations","declarations":[{"languages":["swift"],"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"getAmiiboTypes"},{"kind":"text","text":"("},{"text":"by","kind":"externalParam"},{"text":" ","kind":"text"},{"text":"filter","kind":"internalParam"},{"text":": ","kind":"text"},{"preciseIdentifier":"s:13AmiiboService0A10TypeFilterV","text":"AmiiboTypeFilter","kind":"typeIdentifier","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboTypeFilter"},{"text":") ","kind":"text"},{"text":"async","kind":"keyword"},{"text":" ","kind":"text"},{"text":"throws","kind":"keyword"},{"text":" -> [","kind":"text"},{"preciseIdentifier":"s:13AmiiboService0A4TypeV","text":"AmiiboType","kind":"typeIdentifier","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboType"},{"text":"]","kind":"text"}],"platforms":["macOS"]}]},{"parameters":[{"content":[{"type":"paragraph","inlineContent":[{"text":"A filter to remove unwanted items from the result.","type":"text"}]}],"name":"filter"}],"kind":"parameters"},{"content":[{"level":2,"type":"heading","anchor":"return-value","text":"Return Value"},{"inlineContent":[{"text":"A list of filtered amiibo types.","type":"text"}],"type":"paragraph"}],"kind":"content"},{"content":[{"level":2,"text":"Discussion","anchor":"discussion","type":"heading"},{"style":"note","name":"Throws","content":[{"type":"paragraph","inlineContent":[{"text":"An ","type":"text"},{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboServiceError","isActive":true,"type":"reference"},{"text":" error in case some issue is encountered while generating the result.","type":"text"}]}],"type":"aside"}],"kind":"content"}],"identifier":{"url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient\/getAmiiboTypes(by:)","interfaceLanguage":"swift"},"references":{"doc://AmiiboService/documentation/AmiiboService/AmiiboService":{"url":"\/documentation\/amiiboservice\/amiiboservice","type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboService","role":"symbol","title":"AmiiboService","kind":"symbol","abstract":[{"type":"text","text":"A type that implements the service that uses a client to make calls."}],"fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"AmiiboService","kind":"identifier"}],"navigatorTitle":[{"text":"AmiiboService","kind":"identifier"}]},"doc://AmiiboService/documentation/AmiiboService/AmiiboClient/getAmiiboSeries(by:)":{"kind":"symbol","abstract":[{"type":"text","text":"Gets a list of amiibo series based on a given filter."}],"title":"getAmiiboSeries(by:)","role":"symbol","fragments":[{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"getAmiiboSeries","kind":"identifier"},{"text":"(","kind":"text"},{"kind":"externalParam","text":"by"},{"text":": ","kind":"text"},{"kind":"typeIdentifier","text":"AmiiboSeriesFilter","preciseIdentifier":"s:13AmiiboService0A12SeriesFilterV"},{"text":") ","kind":"text"},{"text":"async","kind":"keyword"},{"kind":"text","text":" "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> ["},{"kind":"typeIdentifier","text":"AmiiboSeries","preciseIdentifier":"s:13AmiiboService0A6SeriesV"},{"text":"]","kind":"text"}],"url":"\/documentation\/amiiboservice\/amiiboclient\/getamiiboseries(by:)","iLine truncated
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"kind":"symbol","metadata":{"modules":[{"name":"AmiiboService"}],"externalID":"s:13AmiiboService0A6ClientP17getGameCharacters2bySayAA0E9CharacterVGAA0eH6FilterV_tYaKF","fragments":[{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"getGameCharacters","kind":"identifier"},{"text":"(","kind":"text"},{"text":"by","kind":"externalParam"},{"text":": ","kind":"text"},{"text":"GameCharacterFilter","kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService19GameCharacterFilterV"},{"text":") ","kind":"text"},{"text":"async","kind":"keyword"},{"text":" ","kind":"text"},{"text":"throws","kind":"keyword"},{"text":" -> [","kind":"text"},{"text":"GameCharacter","kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService13GameCharacterV"},{"text":"]","kind":"text"}],"role":"symbol","required":true,"title":"getGameCharacters(by:)","symbolKind":"method","roleHeading":"Instance Method"},"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient"]]},"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"text":"func","kind":"keyword"},{"kind":"text","text":" "},{"text":"getGameCharacters","kind":"identifier"},{"text":"(","kind":"text"},{"text":"by","kind":"externalParam"},{"text":" ","kind":"text"},{"text":"filter","kind":"internalParam"},{"text":": ","kind":"text"},{"text":"GameCharacterFilter","preciseIdentifier":"s:13AmiiboService19GameCharacterFilterV","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/GameCharacterFilter","kind":"typeIdentifier"},{"kind":"text","text":") "},{"kind":"keyword","text":"async"},{"text":" ","kind":"text"},{"text":"throws","kind":"keyword"},{"kind":"text","text":" -> ["},{"text":"GameCharacter","preciseIdentifier":"s:13AmiiboService13GameCharacterV","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/GameCharacter","kind":"typeIdentifier"},{"text":"]","kind":"text"}],"languages":["swift"],"platforms":["macOS"]}]},{"kind":"parameters","parameters":[{"name":"filter","content":[{"inlineContent":[{"text":"A filter to remove unwanted items from the result.","type":"text"}],"type":"paragraph"}]}]},{"content":[{"type":"heading","level":2,"text":"Return Value","anchor":"return-value"},{"type":"paragraph","inlineContent":[{"type":"text","text":"A list of filtered game characters."}]}],"kind":"content"},{"kind":"content","content":[{"type":"heading","text":"Discussion","anchor":"discussion","level":2},{"type":"aside","content":[{"type":"paragraph","inlineContent":[{"text":"An ","type":"text"},{"type":"reference","isActive":true,"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboServiceError"},{"type":"text","text":" error in case some issue is encountered while generating the result."}]}],"name":"Throws","style":"note"}]}],"variants":[{"paths":["\/documentation\/amiiboservice\/amiiboclient\/getgamecharacters(by:)"],"traits":[{"interfaceLanguage":"swift"}]}],"abstract":[{"type":"text","text":"Gets a list of game characters based on a given filter."}],"schemaVersion":{"minor":3,"major":0,"patch":0},"identifier":{"url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient\/getGameCharacters(by:)","interfaceLanguage":"swift"},"seeAlsoSections":[{"generated":true,"anchor":"Game-endpoints","title":"Game endpoints","identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient\/getGameSeries(by:)"]}],"sections":[],"references":{"doc://AmiiboService/documentation/AmiiboService/GameCharacter":{"kind":"symbol","abstract":[{"type":"text","text":"A model that represents a game character."}],"title":"GameCharacter","role":"symbol","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"GameCharacter"}],"navigatorTitle":[{"text":"GameCharacter","kind":"identifier"}],"url":"\/documentation\/amiiboservice\/gamecharacter","type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/GameCharacter"},"doc://AmiiboService/documentation/AmiiboService/AmiiboService":{"url":"\/documentation\/amiiboservice\/amiiboservice","type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboService","role":"symbol","title":"AmiiboService","kind":"symbol","abstract":[{"type":"text","text":"A type that implements the service that uses a client to make calls."}],"fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"AmiiboService","kind":"identifier"}],"navigatorTitle":[{"text":"AmiiboService","kind":"identifier"}]},"doc://AmiiboService/documentation/AmiiboService/AmiiboClient":{"navigatorTitle":[{"kind":"identifier","text":"AmiiboClient"}],"fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"AmiiboClient"}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient","type":"topic","title":"AmiiboClient","abstract":[{"type":"textLine truncated
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"primaryContentSections":[{"declarations":[{"languages":["swift"],"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"getGameSeries"},{"kind":"text","text":"("},{"kind":"externalParam","text":"by"},{"kind":"text","text":" "},{"kind":"internalParam","text":"filter"},{"kind":"text","text":": "},{"preciseIdentifier":"s:13AmiiboService16GameSeriesFilterV","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/GameSeriesFilter","kind":"typeIdentifier","text":"GameSeriesFilter"},{"kind":"text","text":") "},{"kind":"keyword","text":"async"},{"kind":"text","text":" "},{"kind":"keyword","text":"throws"},{"kind":"text","text":" -> ["},{"preciseIdentifier":"s:13AmiiboService10GameSeriesV","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/GameSeries","kind":"typeIdentifier","text":"GameSeries"},{"kind":"text","text":"]"}],"platforms":["macOS"]}],"kind":"declarations"},{"kind":"parameters","parameters":[{"name":"filter","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"A filter to remove unwanted items from the result."}]}]}]},{"kind":"content","content":[{"anchor":"return-value","text":"Return Value","level":2,"type":"heading"},{"inlineContent":[{"type":"text","text":"A list of filtered game series."}],"type":"paragraph"}]},{"kind":"content","content":[{"anchor":"discussion","type":"heading","level":2,"text":"Discussion"},{"content":[{"type":"paragraph","inlineContent":[{"text":"An ","type":"text"},{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboServiceError","type":"reference","isActive":true},{"text":" error in case some issue is encountered while generating the result.","type":"text"}]}],"type":"aside","style":"note","name":"Throws"}]}],"kind":"symbol","schemaVersion":{"patch":0,"minor":3,"major":0},"sections":[],"seeAlsoSections":[{"title":"Game endpoints","generated":true,"identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient\/getGameCharacters(by:)"],"anchor":"Game-endpoints"}],"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient"]]},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient\/getGameSeries(by:)"},"abstract":[{"text":"Gets a list of game series based on a given filter.","type":"text"}],"metadata":{"fragments":[{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"getGameSeries","kind":"identifier"},{"text":"(","kind":"text"},{"text":"by","kind":"externalParam"},{"text":": ","kind":"text"},{"preciseIdentifier":"s:13AmiiboService16GameSeriesFilterV","text":"GameSeriesFilter","kind":"typeIdentifier"},{"text":") ","kind":"text"},{"text":"async","kind":"keyword"},{"text":" ","kind":"text"},{"text":"throws","kind":"keyword"},{"text":" -> [","kind":"text"},{"preciseIdentifier":"s:13AmiiboService10GameSeriesV","text":"GameSeries","kind":"typeIdentifier"},{"text":"]","kind":"text"}],"symbolKind":"method","role":"symbol","required":true,"modules":[{"name":"AmiiboService"}],"externalID":"s:13AmiiboService0A6ClientP13getGameSeries2bySayAA0eF0VGAA0eF6FilterV_tYaKF","roleHeading":"Instance Method","title":"getGameSeries(by:)"},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiiboclient\/getgameseries(by:)"]}],"references":{"doc://AmiiboService/documentation/AmiiboService/AmiiboClient/getGameSeries(by:)":{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient\/getGameSeries(by:)","fragments":[{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"getGameSeries","kind":"identifier"},{"text":"(","kind":"text"},{"text":"by","kind":"externalParam"},{"text":": ","kind":"text"},{"text":"GameSeriesFilter","kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService16GameSeriesFilterV"},{"text":") ","kind":"text"},{"text":"async","kind":"keyword"},{"text":" ","kind":"text"},{"text":"throws","kind":"keyword"},{"text":" -> [","kind":"text"},{"text":"GameSeries","kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService10GameSeriesV"},{"text":"]","kind":"text"}],"title":"getGameSeries(by:)","required":true,"role":"symbol","type":"topic","url":"\/documentation\/amiiboservice\/amiiboclient\/getgameseries(by:)","kind":"symbol","abstract":[{"type":"text","text":"Gets a list of game series based on a given filter."}]},"doc://AmiiboService/documentation/AmiiboService/AmiiboClient/getGameCharacters(by:)":{"abstract":[{"text":"Gets a list of game characters based on a given filter.","type":"text"}],"fragments":[{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"getGameCharacters","kind":"identifier"},{"text":"(","kind":"text"},{"text":"by","kind":"externalParam"},{"text":": ","kind":"text"},{"text":"GameCharacterFilter","kind":"typeIdentifier","preciseIdentifier":"s:13AmiiboService19GameCharacterFilterV"},{"text"Line truncated
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"schemaVersion":{"minor":3,"major":0,"patch":0},"abstract":[{"type":"text","text":"Gets the date when the data was last updated."}],"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient"]]},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiiboclient\/getlastupdated()"]}],"metadata":{"roleHeading":"Instance Method","fragments":[{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"getLastUpdated","kind":"identifier"},{"text":"() ","kind":"text"},{"text":"async","kind":"keyword"},{"text":" ","kind":"text"},{"text":"throws","kind":"keyword"},{"text":" -> ","kind":"text"},{"preciseIdentifier":"s:10Foundation4DateV","text":"Date","kind":"typeIdentifier"}],"title":"getLastUpdated()","required":true,"modules":[{"name":"AmiiboService"}],"role":"symbol","symbolKind":"method","externalID":"s:13AmiiboService0A6ClientP14getLastUpdated10Foundation4DateVyYaKF"},"kind":"symbol","sections":[],"primaryContentSections":[{"kind":"declarations","declarations":[{"languages":["swift"],"tokens":[{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"getLastUpdated","kind":"identifier"},{"text":"() ","kind":"text"},{"text":"async","kind":"keyword"},{"text":" ","kind":"text"},{"text":"throws","kind":"keyword"},{"text":" -> ","kind":"text"},{"text":"Date","kind":"typeIdentifier","preciseIdentifier":"s:10Foundation4DateV"}],"platforms":["macOS"]}]},{"kind":"content","content":[{"text":"Return Value","anchor":"return-value","level":2,"type":"heading"},{"type":"paragraph","inlineContent":[{"type":"text","text":"A last updated date."}]}]},{"kind":"content","content":[{"level":2,"text":"Discussion","type":"heading","anchor":"discussion"},{"type":"aside","name":"Throws","content":[{"type":"paragraph","inlineContent":[{"text":"An ","type":"text"},{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboServiceError","type":"reference","isActive":true},{"text":" error in case some issue is encountered while generating the result.","type":"text"}]}],"style":"note"}]}],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient\/getLastUpdated()"},"references":{"doc://AmiiboService/documentation/AmiiboService/AmiiboClient":{"navigatorTitle":[{"kind":"identifier","text":"AmiiboClient"}],"fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"AmiiboClient"}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient","type":"topic","title":"AmiiboClient","abstract":[{"type":"text","text":"A protocol that defines API clients containing all available endpoints to interact with."}],"kind":"symbol","role":"symbol","url":"\/documentation\/amiiboservice\/amiiboclient"},"doc://AmiiboService/documentation/AmiiboService/AmiiboService":{"url":"\/documentation\/amiiboservice\/amiiboservice","type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboService","role":"symbol","title":"AmiiboService","kind":"symbol","abstract":[{"type":"text","text":"A type that implements the service that uses a client to make calls."}],"fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"AmiiboService","kind":"identifier"}],"navigatorTitle":[{"text":"AmiiboService","kind":"identifier"}]},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"},"doc://AmiiboService/documentation/AmiiboService/AmiiboClient/getLastUpdated()":{"role":"symbol","kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient\/getLastUpdated()","required":true,"fragments":[{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"getLastUpdated","kind":"identifier"},{"text":"() ","kind":"text"},{"text":"async","kind":"keyword"},{"text":" ","kind":"text"},{"text":"throws","kind":"keyword"},{"text":" -> ","kind":"text"},{"text":"Date","kind":"typeIdentifier","preciseIdentifier":"s:10Foundation4DateV"}],"title":"getLastUpdated()","type":"topic","url":"\/documentation\/amiiboservice\/amiiboclient\/getlastupdated()","abstract":[{"type":"text","text":"Gets the date when the data was last updated."}]},"doc://AmiiboService/documentation/AmiiboService/AmiiboServiceError":{"abstract":[{"type":"text","text":"A representation of all the possible errors that the "},{"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboService","isActive":true,"type":"reference"},{"text":" service couldLine truncated
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"schemaVersion":{"patch":0,"minor":3,"major":0},"abstract":[{"text":"A type that contains values to fine-tune a response when requesting amiibo items.","type":"text"}],"relationshipsSections":[{"identifiers":["doc:\/\/AmiiboService\/s8SendableP","doc:\/\/AmiiboService\/s16SendableMetatypeP"],"title":"Conforms To","type":"conformsTo","kind":"relationships"}],"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService"]]},"seeAlsoSections":[{"identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboSeriesFilter","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboTypeFilter","doc:\/\/AmiiboService\/documentation\/AmiiboService\/GameCharacterFilter","doc:\/\/AmiiboService\/documentation\/AmiiboService\/GameSeriesFilter"],"title":"Filters","anchor":"Filters","generated":true}],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiibofilter"]}],"sections":[],"metadata":{"roleHeading":"Structure","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"AmiiboFilter"}],"title":"AmiiboFilter","modules":[{"name":"AmiiboService"}],"role":"symbol","symbolKind":"struct","navigatorTitle":[{"text":"AmiiboFilter","kind":"identifier"}],"externalID":"s:13AmiiboService0A6FilterV"},"kind":"symbol","topicSections":[{"identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboFilter\/init(head:tail:identifier:name:type:series:gameCharacter:gameSeries:showGames:showUsage:)"],"title":"Initializers","anchor":"Initializers","generated":true},{"identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboFilter\/gameCharacter","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboFilter\/gameSeries","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboFilter\/head","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboFilter\/identifier","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboFilter\/name","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboFilter\/series","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboFilter\/showGames","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboFilter\/showUsage","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboFilter\/tail","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboFilter\/type"],"title":"Instance Properties","anchor":"Instance-Properties","generated":true}],"primaryContentSections":[{"declarations":[{"platforms":["macOS"],"languages":["swift"],"tokens":[{"text":"struct","kind":"keyword"},{"kind":"text","text":" "},{"kind":"identifier","text":"AmiiboFilter"}]}],"kind":"declarations"}],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboFilter"},"references":{"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"},"doc://AmiiboService/documentation/AmiiboService/AmiiboFilter/series":{"role":"symbol","kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboFilter\/series","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"series"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"s:SS","text":"String"},{"kind":"text","text":"?"}],"type":"topic","title":"series","url":"\/documentation\/amiiboservice\/amiibofilter\/series","abstract":[{"text":"An amiibo series to filter the result, if any.","type":"text"}]},"doc://AmiiboService/documentation/AmiiboService/AmiiboTypeFilter":{"fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"AmiiboTypeFilter","kind":"identifier"}],"navigatorTitle":[{"text":"AmiiboTypeFilter","kind":"identifier"}],"kind":"symbol","role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboTypeFilter","abstract":[{"text":"A type that contains values to fine-tune a response when requesting amiibo types.","type":"text"}],"url":"\/documentation\/amiiboservice\/amiibotypefilter","type":"topic","title":"AmiiboTypeFilter"},"doc://AmiiboService/documentation/AmiiboService/AmiiboFilter/showUsage":{"kind":"symbol","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"showUsage","kind":"identifier"},{"text":": ","kind":"text"},{"text":"Bool","kind":"typeIdentifier","preciseIdentifier":"s:Sb"},{"text":"?","kind":"text"}],"abstract":[{"text":"A flag indicating whether to include amiibo usages in games in the response, if any.","type":"text"}],"url":"\/documentation\/amiiboservice\/amiibofilter\/showusage"Line truncated
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"gameCharacter"},{"kind":"text","text":": "},{"preciseIdentifier":"s:SS","kind":"typeIdentifier","text":"String"},{"kind":"text","text":"?"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"minor":3,"patch":0,"major":0},"abstract":[{"type":"text","text":"A game character to filter the result, if any."}],"hierarchy":{"paths":[["doc:\/\/AmiiboService\/documentation\/AmiiboService","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboFilter"]]},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice\/amiibofilter\/gamecharacter"]}],"metadata":{"symbolKind":"property","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"text":"gameCharacter","kind":"identifier"},{"text":": ","kind":"text"},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"?"}],"role":"symbol","roleHeading":"Instance Property","modules":[{"name":"AmiiboService"}],"title":"gameCharacter","externalID":"s:13AmiiboService0A6FilterV13gameCharacterSSSgvp"},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboFilter\/gameCharacter"},"sections":[],"kind":"symbol","references":{"doc://AmiiboService/documentation/AmiiboService/AmiiboFilter":{"kind":"symbol","url":"\/documentation\/amiiboservice\/amiibofilter","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"kind":"identifier","text":"AmiiboFilter"}],"navigatorTitle":[{"text":"AmiiboFilter","kind":"identifier"}],"abstract":[{"text":"A type that contains values to fine-tune a response when requesting amiibo items.","type":"text"}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboFilter","type":"topic","title":"AmiiboFilter","role":"symbol"},"doc://AmiiboService/documentation/AmiiboService":{"title":"AmiiboService","kind":"symbol","type":"topic","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"type":"text","text":" backend service."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","url":"\/documentation\/amiiboservice","role":"collection"},"doc://AmiiboService/documentation/AmiiboService/AmiiboFilter/gameCharacter":{"url":"\/documentation\/amiiboservice\/amiibofilter\/gamecharacter","abstract":[{"type":"text","text":"A game character to filter the result, if any."}],"kind":"symbol","type":"topic","title":"gameCharacter","role":"symbol","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"gameCharacter","kind":"identifier"},{"text":": ","kind":"text"},{"text":"String","kind":"typeIdentifier","preciseIdentifier":"s:SS"},{"text":"?","kind":"text"}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboFilter\/gameCharacter"}}}
|
|
||||||
Loaded 100 of 369 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user