Everything works well and good structure.
This commit is contained in:
20
Sources/MusicBrainz/Models/Area.swift
Normal file
20
Sources/MusicBrainz/Models/Area.swift
Normal file
@@ -0,0 +1,20 @@
|
||||
import Foundation
|
||||
|
||||
public struct Area: MusicBrainzSearchable {
|
||||
public static let entityType: MusicBrainzEntity = .area
|
||||
|
||||
public let id: String
|
||||
public let type: String?
|
||||
public let name: String
|
||||
public let sortName: String?
|
||||
public let disambiguation: String?
|
||||
public let lifeSpan: LifeSpan?
|
||||
public let relations: [Relation]?
|
||||
public let score: Int?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id, type, name, disambiguation, score, relations
|
||||
case sortName = "sort-name"
|
||||
case lifeSpan = "life-span"
|
||||
}
|
||||
}
|
||||
40
Sources/MusicBrainz/Models/Artist.swift
Normal file
40
Sources/MusicBrainz/Models/Artist.swift
Normal file
@@ -0,0 +1,40 @@
|
||||
import Foundation
|
||||
|
||||
public struct Artist: MusicBrainzSearchable {
|
||||
public static let entityType: MusicBrainzEntity = .artist
|
||||
|
||||
public let id: String
|
||||
public let name: String
|
||||
public let sortName: String?
|
||||
public let type: String?
|
||||
public let country: String?
|
||||
public let disambiguation: String?
|
||||
public let lifeSpan: LifeSpan?
|
||||
public let relations: [Relation]?
|
||||
public let score: Int?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id
|
||||
case name
|
||||
case sortName = "sort-name"
|
||||
case type
|
||||
case country
|
||||
case disambiguation
|
||||
case lifeSpan = "life-span"
|
||||
case relations
|
||||
case score
|
||||
}
|
||||
|
||||
public var imageURL: URL? {
|
||||
guard let relations else { return nil }
|
||||
// Look for 'image' or 'wikimedia commons'
|
||||
for rel in relations {
|
||||
if rel.type == "image" || rel.type == "wikimedia commons" {
|
||||
if let resource = rel.url?.resource {
|
||||
return URL(string: resource)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
}
|
||||
18
Sources/MusicBrainz/Models/Event.swift
Normal file
18
Sources/MusicBrainz/Models/Event.swift
Normal file
@@ -0,0 +1,18 @@
|
||||
import Foundation
|
||||
|
||||
public struct Event: MusicBrainzSearchable {
|
||||
public static let entityType: MusicBrainzEntity = .event
|
||||
|
||||
public let id: String
|
||||
public let name: String
|
||||
public let time: String?
|
||||
public let disambiguation: String?
|
||||
public let lifeSpan: LifeSpan?
|
||||
public let relations: [Relation]?
|
||||
public let score: Int?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id, name, time, disambiguation, score, relations
|
||||
case lifeSpan = "life-span"
|
||||
}
|
||||
}
|
||||
17
Sources/MusicBrainz/Models/Instrument.swift
Normal file
17
Sources/MusicBrainz/Models/Instrument.swift
Normal file
@@ -0,0 +1,17 @@
|
||||
import Foundation
|
||||
|
||||
public struct Instrument: MusicBrainzSearchable {
|
||||
public static let entityType: MusicBrainzEntity = .instrument
|
||||
|
||||
public let id: String
|
||||
public let name: String
|
||||
public let type: String?
|
||||
public let description: String?
|
||||
public let disambiguation: String?
|
||||
public let relations: [Relation]?
|
||||
public let score: Int?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id, name, type, description, disambiguation, score, relations
|
||||
}
|
||||
}
|
||||
21
Sources/MusicBrainz/Models/Label.swift
Normal file
21
Sources/MusicBrainz/Models/Label.swift
Normal file
@@ -0,0 +1,21 @@
|
||||
import Foundation
|
||||
|
||||
public struct Label: MusicBrainzSearchable {
|
||||
public static let entityType: MusicBrainzEntity = .label
|
||||
|
||||
public let id: String
|
||||
public let name: String
|
||||
public let type: String?
|
||||
public let labelCode: Int?
|
||||
public let country: String?
|
||||
public let disambiguation: String?
|
||||
public let lifeSpan: LifeSpan?
|
||||
public let relations: [Relation]?
|
||||
public let score: Int?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id, name, type, country, disambiguation, score, relations
|
||||
case labelCode = "label-code"
|
||||
case lifeSpan = "life-span"
|
||||
}
|
||||
}
|
||||
18
Sources/MusicBrainz/Models/Place.swift
Normal file
18
Sources/MusicBrainz/Models/Place.swift
Normal file
@@ -0,0 +1,18 @@
|
||||
import Foundation
|
||||
|
||||
public struct Place: MusicBrainzSearchable {
|
||||
public static let entityType: MusicBrainzEntity = .place
|
||||
|
||||
public let id: String
|
||||
public let name: String
|
||||
public let type: String?
|
||||
public let address: String?
|
||||
public let area: Area?
|
||||
public let disambiguation: String?
|
||||
public let relations: [Relation]?
|
||||
public let score: Int?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id, name, type, address, area, disambiguation, score, relations
|
||||
}
|
||||
}
|
||||
25
Sources/MusicBrainz/Models/Recording.swift
Normal file
25
Sources/MusicBrainz/Models/Recording.swift
Normal file
@@ -0,0 +1,25 @@
|
||||
import Foundation
|
||||
|
||||
public struct Recording: MusicBrainzSearchable {
|
||||
public static let entityType: MusicBrainzEntity = .recording
|
||||
|
||||
public let id: String
|
||||
public let title: String
|
||||
public let length: Int?
|
||||
public let video: Bool?
|
||||
public let disambiguation: String?
|
||||
public let firstReleaseDate: String?
|
||||
public let relations: [Relation]?
|
||||
public let score: Int?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id
|
||||
case title
|
||||
case length
|
||||
case video
|
||||
case disambiguation
|
||||
case firstReleaseDate = "first-release-date"
|
||||
case relations
|
||||
case score
|
||||
}
|
||||
}
|
||||
27
Sources/MusicBrainz/Models/Release.swift
Normal file
27
Sources/MusicBrainz/Models/Release.swift
Normal file
@@ -0,0 +1,27 @@
|
||||
import Foundation
|
||||
|
||||
public struct Release: MusicBrainzSearchable {
|
||||
public static let entityType: MusicBrainzEntity = .release
|
||||
|
||||
public let id: String
|
||||
public let title: String
|
||||
public let status: String?
|
||||
public let date: String?
|
||||
public let country: String?
|
||||
public let barcode: String?
|
||||
public let disambiguation: String?
|
||||
public let relations: [Relation]?
|
||||
public let score: Int?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id
|
||||
case title
|
||||
case status
|
||||
case date
|
||||
case country
|
||||
case barcode
|
||||
case disambiguation
|
||||
case relations
|
||||
case score
|
||||
}
|
||||
}
|
||||
19
Sources/MusicBrainz/Models/ReleaseGroup.swift
Normal file
19
Sources/MusicBrainz/Models/ReleaseGroup.swift
Normal file
@@ -0,0 +1,19 @@
|
||||
import Foundation
|
||||
|
||||
public struct ReleaseGroup: MusicBrainzSearchable {
|
||||
public static let entityType: MusicBrainzEntity = .releaseGroup
|
||||
|
||||
public let id: String
|
||||
public let title: String
|
||||
public let primaryType: String?
|
||||
public let artistCredit: [ArtistCredit]?
|
||||
public let disambiguation: String?
|
||||
public let relations: [Relation]?
|
||||
public let score: Int?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id, title, disambiguation, score, relations
|
||||
case primaryType = "primary-type"
|
||||
case artistCredit = "artist-credit"
|
||||
}
|
||||
}
|
||||
16
Sources/MusicBrainz/Models/Series.swift
Normal file
16
Sources/MusicBrainz/Models/Series.swift
Normal file
@@ -0,0 +1,16 @@
|
||||
import Foundation
|
||||
|
||||
public struct Series: MusicBrainzSearchable {
|
||||
public static let entityType: MusicBrainzEntity = .series
|
||||
|
||||
public let id: String
|
||||
public let name: String
|
||||
public let type: String?
|
||||
public let disambiguation: String?
|
||||
public let relations: [Relation]?
|
||||
public let score: Int?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id, name, type, disambiguation, score, relations
|
||||
}
|
||||
}
|
||||
7
Sources/MusicBrainz/Models/Shared/ArtistCredit.swift
Normal file
7
Sources/MusicBrainz/Models/Shared/ArtistCredit.swift
Normal file
@@ -0,0 +1,7 @@
|
||||
import Foundation
|
||||
|
||||
public struct ArtistCredit: Codable, Sendable {
|
||||
public let name: String
|
||||
public let artist: Artist?
|
||||
public let joinphrase: String?
|
||||
}
|
||||
21
Sources/MusicBrainz/Models/Shared/CoverArt.swift
Normal file
21
Sources/MusicBrainz/Models/Shared/CoverArt.swift
Normal file
@@ -0,0 +1,21 @@
|
||||
import Foundation
|
||||
|
||||
public struct CoverArtImage: Codable, Sendable {
|
||||
public let image: String
|
||||
public let thumbnails: [String: String]
|
||||
public let types: [String]
|
||||
public let front: Bool
|
||||
public let back: Bool
|
||||
public let edit: Int
|
||||
public let comment: String
|
||||
public let id: String
|
||||
}
|
||||
|
||||
public struct CoverArtResponse: Codable, Sendable {
|
||||
public let images: [CoverArtImage]
|
||||
public let release: String
|
||||
|
||||
public var frontImage: CoverArtImage? {
|
||||
images.first { $0.front }
|
||||
}
|
||||
}
|
||||
7
Sources/MusicBrainz/Models/Shared/LifeSpan.swift
Normal file
7
Sources/MusicBrainz/Models/Shared/LifeSpan.swift
Normal file
@@ -0,0 +1,7 @@
|
||||
import Foundation
|
||||
|
||||
public struct LifeSpan: Codable, Sendable {
|
||||
public let begin: String?
|
||||
public let end: String?
|
||||
public let ended: Bool?
|
||||
}
|
||||
14
Sources/MusicBrainz/Models/Shared/Relation.swift
Normal file
14
Sources/MusicBrainz/Models/Shared/Relation.swift
Normal file
@@ -0,0 +1,14 @@
|
||||
import Foundation
|
||||
|
||||
public struct Relation: Codable, Sendable {
|
||||
public let type: String
|
||||
public let direction: String
|
||||
public let url: URLResource?
|
||||
public let artist: Artist?
|
||||
public let release: Release?
|
||||
// Add other entities as needed
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case type, direction, url, artist, release
|
||||
}
|
||||
}
|
||||
6
Sources/MusicBrainz/Models/Shared/URLResource.swift
Normal file
6
Sources/MusicBrainz/Models/Shared/URLResource.swift
Normal file
@@ -0,0 +1,6 @@
|
||||
import Foundation
|
||||
|
||||
public struct URLResource: Codable, Sendable {
|
||||
public let id: String
|
||||
public let resource: String
|
||||
}
|
||||
9
Sources/MusicBrainz/Models/URLReference.swift
Normal file
9
Sources/MusicBrainz/Models/URLReference.swift
Normal file
@@ -0,0 +1,9 @@
|
||||
import Foundation
|
||||
|
||||
public struct URLReference: MusicBrainzSearchable {
|
||||
public static let entityType: MusicBrainzEntity = .url
|
||||
|
||||
public let id: String
|
||||
public let resource: String
|
||||
public let score: Int?
|
||||
}
|
||||
17
Sources/MusicBrainz/Models/Work.swift
Normal file
17
Sources/MusicBrainz/Models/Work.swift
Normal file
@@ -0,0 +1,17 @@
|
||||
import Foundation
|
||||
|
||||
public struct Work: MusicBrainzSearchable {
|
||||
public static let entityType: MusicBrainzEntity = .work
|
||||
|
||||
public let id: String
|
||||
public let title: String
|
||||
public let type: String?
|
||||
public let language: String?
|
||||
public let disambiguation: String?
|
||||
public let relations: [Relation]?
|
||||
public let score: Int?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id, title, type, language, disambiguation, score, relations
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user