enum BooruProviderFlavor: String, CaseIterable, Codable { case danbooru = "Danbooru" case gelbooru = "Gelbooru" case moebooru = "Moebooru" init(provider: BooruProvider) { self = Self.providerMap[provider] ?? .gelbooru } static let supportedTagOrder: [Self: [String]] = { let moebooruAndGelbooruOrder = ["date", "count", "name"] return [ .danbooru: ["name", "date", "count", "similarity"], .moebooru: moebooruAndGelbooruOrder, .gelbooru: moebooruAndGelbooruOrder, ] }() private static let providerMap: [BooruProvider: Self] = [ .danbooru: .danbooru, .yandere: .moebooru, .konachan: .moebooru, .sakugabooru: .moebooru, .safebooru: .gelbooru, .gelbooru: .gelbooru, ] }