-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
UpdateDraft.swift
78 lines (65 loc) · 1.67 KB
/
UpdateDraft.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
public struct UpdateDraft {
public let update: Update
public let images: [Image]
public let video: Video?
public enum Attachment {
case image(Image)
case video(Video)
}
public struct Image {
public let id: Int
public let thumb: String
public let full: String
}
public struct Video {
public let id: Int
public let status: Status
public let frame: String
public enum Status: String {
case processing
case failed
case successful
}
}
}
extension UpdateDraft: Equatable {}
public func == (lhs: UpdateDraft, rhs: UpdateDraft) -> Bool {
return lhs.update.id == rhs.update.id
}
extension UpdateDraft.Attachment {
public var id: Int {
switch self {
case let .image(image):
return image.id
case let .video(video):
return video.id
}
}
public var thumbUrl: String {
switch self {
case let .image(image):
return image.full
case let .video(video):
return video.frame
}
}
}
extension UpdateDraft.Attachment: Equatable {}
public func == (lhs: UpdateDraft.Attachment, rhs: UpdateDraft.Attachment) -> Bool {
return lhs.id == rhs.id
}
extension UpdateDraft: Decodable {
enum CodingKeys: String, CodingKey {
case images
case video
}
public init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
self.update = try Update(from: decoder)
self.images = try values.decode([Image].self, forKey: .images)
self.video = try values.decodeIfPresent(Video.self, forKey: .video)
}
}
extension UpdateDraft.Image: Decodable {}
extension UpdateDraft.Video: Decodable {}
extension UpdateDraft.Video.Status: Decodable {}