// // Card.swift // Pachyderm // // Created by Shadowfacts on 9/9/18. // Copyright © 2018 Shadowfacts. All rights reserved. // import Foundation public class Card: Decodable { public let url: URL public let title: String public let description: String public let image: URL? public let kind: Kind public let authorName: String? public let authorURL: URL? public let providerName: String? public let providerURL: URL? public let html: String? public let width: Int? public let height: Int? public required init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) self.url = try container.decode(URL.self, forKey: .url) self.title = try container.decode(String.self, forKey: .title) self.description = try container.decode(String.self, forKey: .description) self.kind = try container.decode(Kind.self, forKey: .kind) self.image = try? container.decode(URL.self, forKey: .image) self.authorName = try? container.decode(String.self, forKey: .authorName) self.authorURL = try? container.decode(URL.self, forKey: .authorURL) self.providerName = try? container.decode(String.self, forKey: .providerName) self.providerURL = try? container.decode(URL.self, forKey: .providerURL) self.html = try? container.decode(String.self, forKey: .html) self.width = try? container.decode(Int.self, forKey: .width) self.height = try? container.decode(Int.self, forKey: .height) } private enum CodingKeys: String, CodingKey { case url case title case description case image case kind = "type" case authorName = "author_name" case authorURL = "author_url" case providerName = "provider_name" case providerURL = "provider_url" case html case width case height } } extension Card { public enum Kind: String, Decodable { case link case photo case video case rich } }