This repository was archived by the owner on Sep 15, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathRemoteSiteDesign.swift
More file actions
92 lines (80 loc) · 3.13 KB
/
Copy pathRemoteSiteDesign.swift
File metadata and controls
92 lines (80 loc) · 3.13 KB
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import Foundation
public struct RemoteSiteDesigns: Codable {
public let designs: [RemoteSiteDesign]
public let categories: [RemoteSiteDesignCategory]
enum CodingKeys: String, CodingKey {
case designs
case categories
}
public init(from decoder: Decoder) throws {
let map = try decoder.container(keyedBy: CodingKeys.self)
designs = try map.decode([RemoteSiteDesign].self, forKey: .designs)
categories = try map.decode([RemoteSiteDesignCategory].self, forKey: .categories)
}
public init() {
self.init(designs: [], categories: [])
}
public init(designs: [RemoteSiteDesign], categories: [RemoteSiteDesignCategory]) {
self.designs = designs
self.categories = categories
}
}
public struct RemoteSiteDesign: Codable {
public let slug: String
public let title: String
public let demoURL: String
public let screenshot: String?
public let mobileScreenshot: String?
public let tabletScreenshot: String?
public let themeSlug: String?
public let group: [String]?
public let segmentID: Int64?
public let categories: [RemoteSiteDesignCategory]
enum CodingKeys: String, CodingKey {
case slug
case title
case demoURL = "demo_url"
case screenshot = "preview"
case mobileScreenshot = "preview_mobile"
case tabletScreenshot = "preview_tablet"
case themeSlug = "theme"
case group
case segmentID = "segment_id"
case categories
}
public init(from decoder: Decoder) throws {
let map = try decoder.container(keyedBy: CodingKeys.self)
slug = try map.decode(String.self, forKey: .slug)
title = try map.decode(String.self, forKey: .title)
demoURL = try map.decode(String.self, forKey: .demoURL)
screenshot = try? map.decode(String.self, forKey: .screenshot)
mobileScreenshot = try? map.decode(String.self, forKey: .mobileScreenshot)
tabletScreenshot = try? map.decode(String.self, forKey: .tabletScreenshot)
themeSlug = try? map.decode(String.self, forKey: .themeSlug)
group = try? map.decode([String].self, forKey: .group)
segmentID = try? map.decode(Int64.self, forKey: .segmentID)
categories = try map.decode([RemoteSiteDesignCategory].self, forKey: .categories)
}
}
public struct RemoteSiteDesignCategory: Codable, Comparable {
public static func < (lhs: RemoteSiteDesignCategory, rhs: RemoteSiteDesignCategory) -> Bool {
return lhs.slug < rhs.slug
}
public let slug: String
public let title: String
public let description: String
public let emoji: String?
enum CodingKeys: String, CodingKey {
case slug
case title
case description
case emoji
}
public init(from decoder: Decoder) throws {
let map = try decoder.container(keyedBy: CodingKeys.self)
slug = try map.decode(String.self, forKey: .slug)
title = try map.decode(String.self, forKey: .title)
description = try map.decode(String.self, forKey: .description)
emoji = try? map.decode(String.self, forKey: .emoji)
}
}