55 lines
1.6 KiB
Swift
55 lines
1.6 KiB
Swift
/// A format listings are published in, declared in navigation order; the raw value is the search filter token.
|
|
enum Format: String, CaseIterable, Sendable {
|
|
/// Single-issue comics.
|
|
case singleIssues = "single-issues"
|
|
/// Manga volumes.
|
|
case manga
|
|
/// Trade paperbacks.
|
|
case tradePaperbacks = "trade-paperbacks"
|
|
/// Hardcovers.
|
|
case hardcovers
|
|
}
|
|
|
|
// MARK: - Extensions
|
|
|
|
extension Format {
|
|
|
|
// MARK: Computed
|
|
|
|
/// The format's name as shown in the navigation.
|
|
var label: String {
|
|
switch self {
|
|
case .singleIssues: "Single issues"
|
|
case .manga: "Manga"
|
|
case .tradePaperbacks: "Trade paperbacks"
|
|
case .hardcovers: "Hardcovers"
|
|
}
|
|
}
|
|
|
|
/// The format's name for one item.
|
|
var singular: String {
|
|
switch self {
|
|
case .singleIssues: "Single issue"
|
|
case .manga: "Manga"
|
|
case .tradePaperbacks: "Trade paperback"
|
|
case .hardcovers: "Hardcover"
|
|
}
|
|
}
|
|
|
|
/// What the format covers, in a sentence.
|
|
var summary: String {
|
|
switch self {
|
|
case .singleIssues: "Raw and slabbed, all eras. Filter by grade, print and key status."
|
|
case .manga: "Tankōbon volumes, box sets and first English printings."
|
|
case .tradePaperbacks: "Collected runs and one-shots, with printing noted on every copy."
|
|
case .hardcovers: "Omnibuses, deluxe editions and sealed copies."
|
|
}
|
|
}
|
|
|
|
/// The path of the search screen filtered to the format.
|
|
var path: String {
|
|
"\(String.Route.search)?format=\(rawValue)"
|
|
}
|
|
|
|
}
|