import Foundation import SwiftyJSON struct Thumbnail { enum Quality: String, CaseIterable { case maxres, maxresdefault, sddefault, high, medium, `default`, start, middle, end var filename: String { switch self { case .maxres: return "maxres" case .maxresdefault: return "maxresdefault" case .sddefault: return "sddefault" case .high: return "hqdefault" case .medium: return "mqdefault" case .default: return "default" case .start: return "1" case .middle: return "2" case .end: return "3" } } } var url: URL var quality: Quality init(url: URL, quality: Quality) { self.url = url self.quality = quality } var json: JSON { [ "url": url.absoluteString, "quality": quality.rawValue ] } static func from(_ json: JSON) -> Self { .init( url: URL(string: json["url"].stringValue)!, quality: .init(rawValue: json["quality"].stringValue) ?? .default ) } }