Generated-output differences

quicktype output changed between the PR base and tested PR merge revisions.
← Back to the pull request
5test cases
5files differ
4modified
1new
0deleted
190changed lines
+186 −4insertions / deletions
Base 236035089db524c0c5289fc94b197642975991aa · PR merge 3185784f470d4b6b572f43e82821604d83d09a36 · Head 38fc69e99b2154de32ffbdd49dc9b574f496a898 · raw patch
Test case

test/inputs/json/priority/combinations1.json

1 generated file · +9 −1
Mswiftsupport-linux-false--4bd8c552e09a / quicktype.swift+9 −1
@@ -2805,7 +2805,15 @@ func newJSONDecoder() -> JSONDecoder {
28052805 func newJSONEncoder() -> JSONEncoder {
28062806 let encoder = JSONEncoder()
28072807 if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
2808- encoder.dateEncodingStrategy = .iso8601
2808+ encoder.dateEncodingStrategy = .custom { date, encoder in
2809+ let formatter = ISO8601DateFormatter()
2810+ if #available(iOS 11.0, OSX 10.13, tvOS 11.0, watchOS 4.0, *),
2811+ date.timeIntervalSince1970.truncatingRemainder(dividingBy: 1) != 0 {
2812+ formatter.formatOptions.insert(.withFractionalSeconds)
2813+ }
2814+ var container = encoder.singleValueContainer()
2815+ try container.encode(formatter.string(from: date))
2816+ }
28092817 }
28102818 return encoder
28112819 }
Test case

test/inputs/json/priority/combinations2.json

1 generated file · +9 −1
Mswiftsupport-linux-false--4bd8c552e09a / quicktype.swift+9 −1
@@ -2569,7 +2569,15 @@ func newJSONDecoder() -> JSONDecoder {
25692569 func newJSONEncoder() -> JSONEncoder {
25702570 let encoder = JSONEncoder()
25712571 if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
2572- encoder.dateEncodingStrategy = .iso8601
2572+ encoder.dateEncodingStrategy = .custom { date, encoder in
2573+ let formatter = ISO8601DateFormatter()
2574+ if #available(iOS 11.0, OSX 10.13, tvOS 11.0, watchOS 4.0, *),
2575+ date.timeIntervalSince1970.truncatingRemainder(dividingBy: 1) != 0 {
2576+ formatter.formatOptions.insert(.withFractionalSeconds)
2577+ }
2578+ var container = encoder.singleValueContainer()
2579+ try container.encode(formatter.string(from: date))
2580+ }
25732581 }
25742582 return encoder
25752583 }
Test case

test/inputs/json/priority/combinations3.json

1 generated file · +9 −1
Mswiftsupport-linux-false--4bd8c552e09a / quicktype.swift+9 −1
@@ -3104,7 +3104,15 @@ func newJSONDecoder() -> JSONDecoder {
31043104 func newJSONEncoder() -> JSONEncoder {
31053105 let encoder = JSONEncoder()
31063106 if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
3107- encoder.dateEncodingStrategy = .iso8601
3107+ encoder.dateEncodingStrategy = .custom { date, encoder in
3108+ let formatter = ISO8601DateFormatter()
3109+ if #available(iOS 11.0, OSX 10.13, tvOS 11.0, watchOS 4.0, *),
3110+ date.timeIntervalSince1970.truncatingRemainder(dividingBy: 1) != 0 {
3111+ formatter.formatOptions.insert(.withFractionalSeconds)
3112+ }
3113+ var container = encoder.singleValueContainer()
3114+ try container.encode(formatter.string(from: date))
3115+ }
31083116 }
31093117 return encoder
31103118 }
Test case

test/inputs/json/priority/combinations4.json

1 generated file · +9 −1
Mswiftsupport-linux-false--4bd8c552e09a / quicktype.swift+9 −1
@@ -3608,7 +3608,15 @@ func newJSONDecoder() -> JSONDecoder {
36083608 func newJSONEncoder() -> JSONEncoder {
36093609 let encoder = JSONEncoder()
36103610 if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
3611- encoder.dateEncodingStrategy = .iso8601
3611+ encoder.dateEncodingStrategy = .custom { date, encoder in
3612+ let formatter = ISO8601DateFormatter()
3613+ if #available(iOS 11.0, OSX 10.13, tvOS 11.0, watchOS 4.0, *),
3614+ date.timeIntervalSince1970.truncatingRemainder(dividingBy: 1) != 0 {
3615+ formatter.formatOptions.insert(.withFractionalSeconds)
3616+ }
3617+ var container = encoder.singleValueContainer()
3618+ try container.encode(formatter.string(from: date))
3619+ }
36123620 }
36133621 return encoder
36143622 }
Test case

test/inputs/schema/date-time.schema

1 generated file · +150 −0
Aschema-swiftsupport-linux-false--4bd8c552e09a / quicktype.swift+150 −0
@@ -0,0 +1,150 @@
1+// This file was generated from JSON Schema using quicktype, do not modify it directly.
2+// To parse the JSON, add this file to your project and do:
3+//
4+// let topLevel = try TopLevel(json)
5+
6+import Foundation
7+
8+// MARK: - TopLevel
9+struct TopLevel: Codable {
10+ let complexUnionArray: [ComplexUnionArrayElement]
11+ let date: String
12+ let dateTime: Date
13+ let time: String
14+ let unionArray: [String]
15+
16+ enum CodingKeys: String, CodingKey {
17+ case complexUnionArray = "complex-union-array"
18+ case date = "date"
19+ case dateTime = "date-time"
20+ case time = "time"
21+ case unionArray = "union-array"
22+ }
23+}
24+
25+// MARK: TopLevel convenience initializers and mutators
26+
27+extension TopLevel {
28+ init(data: Data) throws {
29+ self = try newJSONDecoder().decode(TopLevel.self, from: data)
30+ }
31+
32+ init(_ json: String, using encoding: String.Encoding = .utf8) throws {
33+ guard let data = json.data(using: encoding) else {
34+ throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
35+ }
36+ try self.init(data: data)
37+ }
38+
39+ init(fromURL url: URL) throws {
40+ try self.init(data: try Data(contentsOf: url))
41+ }
42+
43+ func with(
44+ complexUnionArray: [ComplexUnionArrayElement]? = nil,
45+ date: String? = nil,
46+ dateTime: Date? = nil,
47+ time: String? = nil,
48+ unionArray: [String]? = nil
49+ ) -> TopLevel {
50+ return TopLevel(
51+ complexUnionArray: complexUnionArray ?? self.complexUnionArray,
52+ date: date ?? self.date,
53+ dateTime: dateTime ?? self.dateTime,
54+ time: time ?? self.time,
55+ unionArray: unionArray ?? self.unionArray
56+ )
57+ }
58+
59+ func jsonData() throws -> Data {
60+ return try newJSONEncoder().encode(self)
61+ }
62+
63+ func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
64+ return String(data: try self.jsonData(), encoding: encoding)
65+ }
66+}
67+
68+enum ComplexUnionArrayElement: Codable {
69+ case dateTime(Date)
70+ case enumeration(ComplexUnionArrayEnum)
71+ case integer(Int)
72+
73+ init(from decoder: Decoder) throws {
74+ let container = try decoder.singleValueContainer()
75+ if let x = try? container.decode(Int.self) {
76+ self = .integer(x)
77+ return
78+ }
79+ if let x = try? container.decode(Date.self) {
80+ self = .dateTime(x)
81+ return
82+ }
83+ if let x = try? container.decode(ComplexUnionArrayEnum.self) {
84+ self = .enumeration(x)
85+ return
86+ }
87+ throw DecodingError.typeMismatch(ComplexUnionArrayElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for ComplexUnionArrayElement"))
88+ }
89+
90+ func encode(to encoder: Encoder) throws {
91+ var container = encoder.singleValueContainer()
92+ switch self {
93+ case .dateTime(let x):
94+ try container.encode(x)
95+ case .enumeration(let x):
96+ try container.encode(x)
97+ case .integer(let x):
98+ try container.encode(x)
99+ }
100+ }
101+}
102+
103+enum ComplexUnionArrayEnum: String, Codable {
104+ case foo = "foo"
105+ case bar = "bar"
106+}
107+
108+// MARK: - Helper functions for creating encoders and decoders
109+
110+private func isValidDate(_ value: String) -> Bool {
111+ let formatter = DateFormatter()
112+ formatter.locale = Locale(identifier: "en_US_POSIX")
113+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
114+ formatter.dateFormat = "u-MM-dd"
115+ formatter.isLenient = false
116+ return formatter.date(from: String(value.prefix(10))) != nil
117+}
118+
119+func newJSONDecoder() -> JSONDecoder {
120+ let decoder = JSONDecoder()
121+ if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
122+ decoder.dateDecodingStrategy = .custom { decoder in
123+ let dateStr = try decoder.singleValueContainer().decode(String.self).uppercased()
124+ guard isValidDate(dateStr) else {
125+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
126+ }
127+ let dateData = try JSONEncoder().encode(dateStr)
128+ let dateDecoder = JSONDecoder()
129+ dateDecoder.dateDecodingStrategy = .iso8601
130+ return try dateDecoder.decode(Date.self, from: dateData)
131+ }
132+ }
133+ return decoder
134+}
135+
136+func newJSONEncoder() -> JSONEncoder {
137+ let encoder = JSONEncoder()
138+ if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
139+ encoder.dateEncodingStrategy = .custom { date, encoder in
140+ let formatter = ISO8601DateFormatter()
141+ if #available(iOS 11.0, OSX 10.13, tvOS 11.0, watchOS 4.0, *),
142+ date.timeIntervalSince1970.truncatingRemainder(dividingBy: 1) != 0 {
143+ formatter.formatOptions.insert(.withFractionalSeconds)
144+ }
145+ var container = encoder.singleValueContainer()
146+ try container.encode(formatter.string(from: date))
147+ }
148+ }
149+ return encoder
150+}
No generated files match these filters.