Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {
- "from": "Guille",
- "text": "Look what I just found!",
- "attachments": [
- {
- "type": "image",
- "payload": {
- "url": "http://via.placeholder.com/640x480",
- "width": 640,
- "height": 480
- }
- },
- {
- "type": "audio",
- "payload": {
- "title": "Never Gonna Give You Up",
- "url": "https://audio.com/NeverGonnaGiveYouUp.mp3",
- "shouldAutoplay": true,
- }
- }
- ]
- }
- struct ImageAttachment: Codable {
- let url: URL
- let width: Int
- let height: Int
- }
- struct AudioAttachment: Codable {
- let title: String
- let url: URL
- let shouldAutoplay: Bool
- }
- enum Attachment {
- case image(ImageAttachment)
- case audio(AudioAttachment)
- case unsupported
- }
- extension Attachment: Codable {
- private enum CodingKeys: String, CodingKey {
- case type
- case payload
- }
- init(from decoder: Decoder) throws {
- let container = try decoder.container(keyedBy: CodingKeys.self)
- let type = try container.decode(String.self, forKey: .type)
- switch type {
- case "image":
- let payload = try container.decode(ImageAttachment.self, forKey: .payload)
- self = .image(payload)
- case "audio":
- let payload = try container.decode(AudioAttachment.self, forKey: .payload)
- self = .audio(payload)
- default:
- self = .unsupported
- }
- }
- ...
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement