Generated-output differences

quicktype output changed between the PR base and tested PR merge revisions.
← Back to the pull request
314test cases
469files differ
469modified
0new
0deleted
1,383changed lines
+879 −504insertions / deletions
Base d6ee70d8b68fa392b2e7eb85d20eb7717aa2c03e · PR merge 9870d18ed3c37d58902f3e3dcbeeaf6ad7a70a4e · Head f362b87ccb088868b2455159d702fb4bcdd51f23 · raw patch
Test case

test/inputs/graphql/github1.graphql

1 generated file · +1 −1
Mgraphql-swiftdefault / quicktype.swift+1 −1
@@ -195,7 +195,7 @@ func newJSONDecoder() -> JSONDecoder {
195195 let decoder = JSONDecoder()
196196 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
197197 let container = try decoder.singleValueContainer()
198- let dateStr = try container.decode(String.self)
198+ let dateStr = try container.decode(String.self).uppercased()
199199
200200 let formatter = DateFormatter()
201201 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/graphql/github2.graphql

1 generated file · +1 −1
Mgraphql-swiftdefault / quicktype.swift+1 −1
@@ -287,7 +287,7 @@ func newJSONDecoder() -> JSONDecoder {
287287 let decoder = JSONDecoder()
288288 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
289289 let container = try decoder.singleValueContainer()
290- let dateStr = try container.decode(String.self)
290+ let dateStr = try container.decode(String.self).uppercased()
291291
292292 let formatter = DateFormatter()
293293 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/graphql/github3.graphql

1 generated file · +1 −1
Mgraphql-swiftdefault / quicktype.swift+1 −1
@@ -333,7 +333,7 @@ func newJSONDecoder() -> JSONDecoder {
333333 let decoder = JSONDecoder()
334334 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
335335 let container = try decoder.singleValueContainer()
336- let dateStr = try container.decode(String.self)
336+ let dateStr = try container.decode(String.self).uppercased()
337337
338338 let formatter = DateFormatter()
339339 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/graphql/github4.graphql

1 generated file · +1 −1
Mgraphql-swiftdefault / quicktype.swift+1 −1
@@ -337,7 +337,7 @@ func newJSONDecoder() -> JSONDecoder {
337337 let decoder = JSONDecoder()
338338 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
339339 let container = try decoder.singleValueContainer()
340- let dateStr = try container.decode(String.self)
340+ let dateStr = try container.decode(String.self).uppercased()
341341
342342 let formatter = DateFormatter()
343343 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/graphql/github5.graphql

1 generated file · +1 −1
Mgraphql-swiftdefault / quicktype.swift+1 −1
@@ -195,7 +195,7 @@ func newJSONDecoder() -> JSONDecoder {
195195 let decoder = JSONDecoder()
196196 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
197197 let container = try decoder.singleValueContainer()
198- let dateStr = try container.decode(String.self)
198+ let dateStr = try container.decode(String.self).uppercased()
199199
200200 let formatter = DateFormatter()
201201 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/graphql/github6.graphql

1 generated file · +1 −1
Mgraphql-swiftdefault / quicktype.swift+1 −1
@@ -195,7 +195,7 @@ func newJSONDecoder() -> JSONDecoder {
195195 let decoder = JSONDecoder()
196196 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
197197 let container = try decoder.singleValueContainer()
198- let dateStr = try container.decode(String.self)
198+ let dateStr = try container.decode(String.self).uppercased()
199199
200200 let formatter = DateFormatter()
201201 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/graphql/github7.graphql

1 generated file · +1 −1
Mgraphql-swiftdefault / quicktype.swift+1 −1
@@ -391,7 +391,7 @@ func newJSONDecoder() -> JSONDecoder {
391391 let decoder = JSONDecoder()
392392 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
393393 let container = try decoder.singleValueContainer()
394- let dateStr = try container.decode(String.self)
394+ let dateStr = try container.decode(String.self).uppercased()
395395
396396 let formatter = DateFormatter()
397397 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/graphql/github8.graphql

1 generated file · +1 −1
Mgraphql-swiftdefault / quicktype.swift+1 −1
@@ -256,7 +256,7 @@ func newJSONDecoder() -> JSONDecoder {
256256 let decoder = JSONDecoder()
257257 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
258258 let container = try decoder.singleValueContainer()
259- let dateStr = try container.decode(String.self)
259+ let dateStr = try container.decode(String.self).uppercased()
260260
261261 let formatter = DateFormatter()
262262 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/graphql/github9.graphql

1 generated file · +1 −1
Mgraphql-swiftdefault / quicktype.swift+1 −1
@@ -300,7 +300,7 @@ func newJSONDecoder() -> JSONDecoder {
300300 let decoder = JSONDecoder()
301301 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
302302 let container = try decoder.singleValueContainer()
303- let dateStr = try container.decode(String.self)
303+ let dateStr = try container.decode(String.self).uppercased()
304304
305305 let formatter = DateFormatter()
306306 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/00c36.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -240,7 +240,7 @@ func newJSONDecoder() -> JSONDecoder {
240240 let decoder = JSONDecoder()
241241 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
242242 let container = try decoder.singleValueContainer()
243- let dateStr = try container.decode(String.self)
243+ let dateStr = try container.decode(String.self).uppercased()
244244
245245 let formatter = DateFormatter()
246246 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/00ec5.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -623,7 +623,7 @@ func newJSONDecoder() -> JSONDecoder {
623623 let decoder = JSONDecoder()
624624 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
625625 let container = try decoder.singleValueContainer()
626- let dateStr = try container.decode(String.self)
626+ let dateStr = try container.decode(String.self).uppercased()
627627
628628 let formatter = DateFormatter()
629629 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/010b1.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -106,7 +106,7 @@ func newJSONDecoder() -> JSONDecoder {
106106 let decoder = JSONDecoder()
107107 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
108108 let container = try decoder.singleValueContainer()
109- let dateStr = try container.decode(String.self)
109+ let dateStr = try container.decode(String.self).uppercased()
110110
111111 let formatter = DateFormatter()
112112 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/016af.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -103,7 +103,7 @@ func newJSONDecoder() -> JSONDecoder {
103103 let decoder = JSONDecoder()
104104 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105105 let container = try decoder.singleValueContainer()
106- let dateStr = try container.decode(String.self)
106+ let dateStr = try container.decode(String.self).uppercased()
107107
108108 let formatter = DateFormatter()
109109 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/033b1.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -63,7 +63,7 @@ func newJSONDecoder() -> JSONDecoder {
6363 let decoder = JSONDecoder()
6464 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6565 let container = try decoder.singleValueContainer()
66- let dateStr = try container.decode(String.self)
66+ let dateStr = try container.decode(String.self).uppercased()
6767
6868 let formatter = DateFormatter()
6969 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/050b0.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -337,7 +337,7 @@ func newJSONDecoder() -> JSONDecoder {
337337 let decoder = JSONDecoder()
338338 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
339339 let container = try decoder.singleValueContainer()
340- let dateStr = try container.decode(String.self)
340+ let dateStr = try container.decode(String.self).uppercased()
341341
342342 let formatter = DateFormatter()
343343 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/06bee.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -282,7 +282,7 @@ func newJSONDecoder() -> JSONDecoder {
282282 let decoder = JSONDecoder()
283283 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
284284 let container = try decoder.singleValueContainer()
285- let dateStr = try container.decode(String.self)
285+ let dateStr = try container.decode(String.self).uppercased()
286286
287287 let formatter = DateFormatter()
288288 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/07540.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -98,7 +98,7 @@ func newJSONDecoder() -> JSONDecoder {
9898 let decoder = JSONDecoder()
9999 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
100100 let container = try decoder.singleValueContainer()
101- let dateStr = try container.decode(String.self)
101+ let dateStr = try container.decode(String.self).uppercased()
102102
103103 let formatter = DateFormatter()
104104 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/0779f.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -271,7 +271,7 @@ func newJSONDecoder() -> JSONDecoder {
271271 let decoder = JSONDecoder()
272272 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
273273 let container = try decoder.singleValueContainer()
274- let dateStr = try container.decode(String.self)
274+ let dateStr = try container.decode(String.self).uppercased()
275275
276276 let formatter = DateFormatter()
277277 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/07c75.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -258,7 +258,7 @@ func newJSONDecoder() -> JSONDecoder {
258258 let decoder = JSONDecoder()
259259 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
260260 let container = try decoder.singleValueContainer()
261- let dateStr = try container.decode(String.self)
261+ let dateStr = try container.decode(String.self).uppercased()
262262
263263 let formatter = DateFormatter()
264264 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/09f54.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -163,7 +163,7 @@ func newJSONDecoder() -> JSONDecoder {
163163 let decoder = JSONDecoder()
164164 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
165165 let container = try decoder.singleValueContainer()
166- let dateStr = try container.decode(String.self)
166+ let dateStr = try container.decode(String.self).uppercased()
167167
168168 let formatter = DateFormatter()
169169 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/0a358.json

4 generated files · +15 −5
Mcplusplusdefault / quicktype.hpp+2 −2
@@ -149,12 +149,12 @@ namespace quicktype {
149149 inline void from_json(const json & j, Result& x) {
150150 if (!j.is_object()) throw std::runtime_error("Expected object");
151151 x.set_code(j.at("code").get<std::string>());
152- if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
152+ if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
153153 x.set_created_at(j.at("created_at").get<std::string>());
154154 if (j.find("id") != j.end() && !j.at("id").is_number_integer()) throw std::runtime_error("Expected integer");
155155 x.set_id(j.at("id").get<int64_t>());
156156 x.set_name(j.at("name").get<std::string>());
157- if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
157+ if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
158158 x.set_updated_at(j.at("updated_at").get<std::string>());
159159 x.set_uri(j.at("uri").get<std::string>());
160160 }
Mobjective-cdefault / QTTopLevel.m+4 −2
@@ -228,12 +228,14 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
228228 {
229229 if (self = [super init]) {
230230 if (![dict[@"code"] isKindOfClass:NSString.class]) return nil;
231- if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
231+ if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
232+ if (dict[@"created_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created_at"] substringToIndex:10]]) return nil;
232233 if (![dict[@"created_at"] isKindOfClass:NSString.class]) return nil;
233234 if (![dict[@"id"] isKindOfClass:NSNumber.class]) return nil;
234235 if ([dict[@"id"] doubleValue] != [dict[@"id"] longLongValue]) return nil;
235236 if (![dict[@"name"] isKindOfClass:NSString.class]) return nil;
236- if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
237+ if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
238+ if (dict[@"updated_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"updated_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"updated_at"] substringToIndex:10]]) return nil;
237239 if (![dict[@"updated_at"] isKindOfClass:NSString.class]) return nil;
238240 if (![dict[@"uri"] isKindOfClass:NSString.class]) return nil;
239241 [self setValuesForKeysWithDictionary:dict];
Mphpdefault / TopLevel.php+8 −0
@@ -583,6 +583,10 @@ class Result {
583583 */
584584 public static function fromCreatedAt(string $value): DateTime {
585585 $tmp = new DateTime($value);
586+ $errors = DateTime::getLastErrors();
587+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
588+ throw new Exception('Invalid date-time');
589+ }
586590 if (!is_a($tmp, 'DateTime')) {
587591 throw new Exception('Attribute Error:Result::');
588592 }
@@ -731,6 +735,10 @@ class Result {
731735 */
732736 public static function fromUpdatedAt(string $value): DateTime {
733737 $tmp = new DateTime($value);
738+ $errors = DateTime::getLastErrors();
739+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
740+ throw new Exception('Invalid date-time');
741+ }
734742 if (!is_a($tmp, 'DateTime')) {
735743 throw new Exception('Attribute Error:Result::');
736744 }
Mswiftdefault / quicktype.swift+1 −1
@@ -186,7 +186,7 @@ func newJSONDecoder() -> JSONDecoder {
186186 let decoder = JSONDecoder()
187187 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
188188 let container = try decoder.singleValueContainer()
189- let dateStr = try container.decode(String.self)
189+ let dateStr = try container.decode(String.self).uppercased()
190190
191191 let formatter = DateFormatter()
192192 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/0a91a.json

4 generated files · +57 −17
Mcplusplusdefault / quicktype.hpp+8 −8
@@ -1243,7 +1243,7 @@ namespace quicktype {
12431243 x.set_compare_url(j.at("compare_url").get<std::string>());
12441244 x.set_contents_url(j.at("contents_url").get<std::string>());
12451245 x.set_contributors_url(j.at("contributors_url").get<std::string>());
1246- if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
1246+ if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
12471247 x.set_created_at(j.at("created_at").get<std::string>());
12481248 x.set_default_branch(j.at("default_branch").get<std::string>());
12491249 x.set_deployments_url(j.at("deployments_url").get<std::string>());
@@ -1289,7 +1289,7 @@ namespace quicktype {
12891289 x.set_open_issues_count(j.at("open_issues_count").get<int64_t>());
12901290 x.set_owner(j.at("owner").get<MergedBy>());
12911291 x.set_pulls_url(j.at("pulls_url").get<std::string>());
1292- if (j.find("pushed_at") != j.end() && !std::regex_match(j.at("pushed_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
1292+ if (j.find("pushed_at") != j.end() && !std::regex_match(j.at("pushed_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
12931293 x.set_pushed_at(j.at("pushed_at").get<std::string>());
12941294 x.set_releases_url(j.at("releases_url").get<std::string>());
12951295 x.set_repo_private(j.at("private").get<bool>());
@@ -1306,7 +1306,7 @@ namespace quicktype {
13061306 x.set_tags_url(j.at("tags_url").get<std::string>());
13071307 x.set_teams_url(j.at("teams_url").get<std::string>());
13081308 x.set_trees_url(j.at("trees_url").get<std::string>());
1309- if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
1309+ if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
13101310 x.set_updated_at(j.at("updated_at").get<std::string>());
13111311 x.set_url(j.at("url").get<std::string>());
13121312 if (j.find("watchers") != j.end() && !j.at("watchers").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -1450,7 +1450,7 @@ namespace quicktype {
14501450 x.set_body(j.at("body").get<std::string>());
14511451 if (j.find("changed_files") != j.end() && !j.at("changed_files").is_number_integer()) throw std::runtime_error("Expected integer");
14521452 x.set_changed_files(j.at("changed_files").get<int64_t>());
1453- if (j.find("closed_at") != j.end() && !std::regex_match(j.at("closed_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
1453+ if (j.find("closed_at") != j.end() && !std::regex_match(j.at("closed_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
14541454 x.set_closed_at(j.at("closed_at").get<std::string>());
14551455 if (j.find("comments") != j.end() && !j.at("comments").is_number_integer()) throw std::runtime_error("Expected integer");
14561456 x.set_comments(j.at("comments").get<int64_t>());
@@ -1458,7 +1458,7 @@ namespace quicktype {
14581458 if (j.find("commits") != j.end() && !j.at("commits").is_number_integer()) throw std::runtime_error("Expected integer");
14591459 x.set_commits(j.at("commits").get<int64_t>());
14601460 x.set_commits_url(j.at("commits_url").get<std::string>());
1461- if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
1461+ if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
14621462 x.set_created_at(j.at("created_at").get<std::string>());
14631463 if (j.find("deletions") != j.end() && !j.at("deletions").is_number_integer()) throw std::runtime_error("Expected integer");
14641464 x.set_deletions(j.at("deletions").get<int64_t>());
@@ -1475,7 +1475,7 @@ namespace quicktype {
14751475 x.set_mergeable(get_untyped(j, "mergeable"));
14761476 x.set_mergeable_state(j.at("mergeable_state").get<std::string>());
14771477 x.set_merged(j.at("merged").get<bool>());
1478- if (j.find("merged_at") != j.end() && !std::regex_match(j.at("merged_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
1478+ if (j.find("merged_at") != j.end() && !std::regex_match(j.at("merged_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
14791479 x.set_merged_at(j.at("merged_at").get<std::string>());
14801480 x.set_merged_by(j.at("merged_by").get<MergedBy>());
14811481 x.set_milestone(get_untyped(j, "milestone"));
@@ -1491,7 +1491,7 @@ namespace quicktype {
14911491 x.set_state(j.at("state").get<std::string>());
14921492 x.set_statuses_url(j.at("statuses_url").get<std::string>());
14931493 x.set_title(j.at("title").get<std::string>());
1494- if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
1494+ if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
14951495 x.set_updated_at(j.at("updated_at").get<std::string>());
14961496 x.set_url(j.at("url").get<std::string>());
14971497 x.set_user(j.at("user").get<MergedBy>());
@@ -1613,7 +1613,7 @@ namespace quicktype {
16131613 inline void from_json(const json & j, TopLevelElement& x) {
16141614 if (!j.is_object()) throw std::runtime_error("Expected object");
16151615 x.set_actor(j.at("actor").get<Actor>());
1616- if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
1616+ if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
16171617 x.set_created_at(j.at("created_at").get<std::string>());
16181618 x.set_id(j.at("id").get<std::string>());
16191619 if (j.find("org") != j.end() && j.at("org").is_null()) throw std::runtime_error("Unexpected null");
Mobjective-cdefault / QTTopLevel.m+16 −8
@@ -175,7 +175,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
175175 {
176176 if (self = [super init]) {
177177 if (![dict[@"actor"] isKindOfClass:NSDictionary.class]) return nil;
178- if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
178+ if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
179+ if (dict[@"created_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created_at"] substringToIndex:10]]) return nil;
179180 if (![dict[@"created_at"] isKindOfClass:NSString.class]) return nil;
180181 if (![dict[@"id"] isKindOfClass:NSString.class]) return nil;
181182 if (![dict[@"public"] isKindOfClass:NSNumber.class]) return nil;
@@ -539,7 +540,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
539540 if (![dict[@"body"] isKindOfClass:NSString.class]) return nil;
540541 if (![dict[@"changed_files"] isKindOfClass:NSNumber.class]) return nil;
541542 if ([dict[@"changed_files"] doubleValue] != [dict[@"changed_files"] longLongValue]) return nil;
542- if (dict[@"closed_at"] && [dict[@"closed_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
543+ if (dict[@"closed_at"] && [dict[@"closed_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
544+ if (dict[@"closed_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"closed_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"closed_at"] substringToIndex:10]]) return nil;
543545 if (![dict[@"closed_at"] isKindOfClass:NSString.class]) return nil;
544546 if (![dict[@"comments"] isKindOfClass:NSNumber.class]) return nil;
545547 if ([dict[@"comments"] doubleValue] != [dict[@"comments"] longLongValue]) return nil;
@@ -547,7 +549,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
547549 if (![dict[@"commits"] isKindOfClass:NSNumber.class]) return nil;
548550 if ([dict[@"commits"] doubleValue] != [dict[@"commits"] longLongValue]) return nil;
549551 if (![dict[@"commits_url"] isKindOfClass:NSString.class]) return nil;
550- if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
552+ if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
553+ if (dict[@"created_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created_at"] substringToIndex:10]]) return nil;
551554 if (![dict[@"created_at"] isKindOfClass:NSString.class]) return nil;
552555 if (![dict[@"deletions"] isKindOfClass:NSNumber.class]) return nil;
553556 if ([dict[@"deletions"] doubleValue] != [dict[@"deletions"] longLongValue]) return nil;
@@ -564,7 +567,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
564567 if (![dict[@"merge_commit_sha"] isKindOfClass:NSString.class]) return nil;
565568 if (!dict[@"mergeable"]) return nil;
566569 if (![dict[@"mergeable_state"] isKindOfClass:NSString.class]) return nil;
567- if (dict[@"merged_at"] && [dict[@"merged_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
570+ if (dict[@"merged_at"] && [dict[@"merged_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
571+ if (dict[@"merged_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"merged_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"merged_at"] substringToIndex:10]]) return nil;
568572 if (![dict[@"merged_at"] isKindOfClass:NSString.class]) return nil;
569573 if (![dict[@"merged_by"] isKindOfClass:NSDictionary.class]) return nil;
570574 if (!dict[@"milestone"]) return nil;
@@ -580,7 +584,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
580584 if (![dict[@"state"] isKindOfClass:NSString.class]) return nil;
581585 if (![dict[@"statuses_url"] isKindOfClass:NSString.class]) return nil;
582586 if (![dict[@"title"] isKindOfClass:NSString.class]) return nil;
583- if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
587+ if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
588+ if (dict[@"updated_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"updated_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"updated_at"] substringToIndex:10]]) return nil;
584589 if (![dict[@"updated_at"] isKindOfClass:NSString.class]) return nil;
585590 if (![dict[@"url"] isKindOfClass:NSString.class]) return nil;
586591 if (![dict[@"user"] isKindOfClass:NSDictionary.class]) return nil;
@@ -794,7 +799,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
794799 if (![dict[@"compare_url"] isKindOfClass:NSString.class]) return nil;
795800 if (![dict[@"contents_url"] isKindOfClass:NSString.class]) return nil;
796801 if (![dict[@"contributors_url"] isKindOfClass:NSString.class]) return nil;
797- if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
802+ if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
803+ if (dict[@"created_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created_at"] substringToIndex:10]]) return nil;
798804 if (![dict[@"created_at"] isKindOfClass:NSString.class]) return nil;
799805 if (![dict[@"default_branch"] isKindOfClass:NSString.class]) return nil;
800806 if (![dict[@"deployments_url"] isKindOfClass:NSString.class]) return nil;
@@ -840,7 +846,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
840846 if ([dict[@"open_issues_count"] doubleValue] != [dict[@"open_issues_count"] longLongValue]) return nil;
841847 if (![dict[@"owner"] isKindOfClass:NSDictionary.class]) return nil;
842848 if (![dict[@"pulls_url"] isKindOfClass:NSString.class]) return nil;
843- if (dict[@"pushed_at"] && [dict[@"pushed_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
849+ if (dict[@"pushed_at"] && [dict[@"pushed_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
850+ if (dict[@"pushed_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"pushed_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"pushed_at"] substringToIndex:10]]) return nil;
844851 if (![dict[@"pushed_at"] isKindOfClass:NSString.class]) return nil;
845852 if (![dict[@"releases_url"] isKindOfClass:NSString.class]) return nil;
846853 if (![dict[@"size"] isKindOfClass:NSNumber.class]) return nil;
@@ -857,7 +864,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
857864 if (![dict[@"teams_url"] isKindOfClass:NSString.class]) return nil;
858865 if (!dict[@"description"]) return nil;
859866 if (![dict[@"trees_url"] isKindOfClass:NSString.class]) return nil;
860- if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
867+ if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
868+ if (dict[@"updated_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"updated_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"updated_at"] substringToIndex:10]]) return nil;
861869 if (![dict[@"updated_at"] isKindOfClass:NSString.class]) return nil;
862870 if (![dict[@"url"] isKindOfClass:NSString.class]) return nil;
863871 if (![dict[@"watchers"] isKindOfClass:NSNumber.class]) return nil;
Mphpdefault / TopLevel.php+32 −0
@@ -89,6 +89,10 @@ class TopLevel {
8989 */
9090 public static function fromCreatedAt(string $value): DateTime {
9191 $tmp = new DateTime($value);
92+ $errors = DateTime::getLastErrors();
93+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
94+ throw new Exception('Invalid date-time');
95+ }
9296 if (!is_a($tmp, 'DateTime')) {
9397 throw new Exception('Attribute Error:TopLevel::');
9498 }
@@ -2790,6 +2794,10 @@ class PullRequest {
27902794 */
27912795 public static function fromClosedAt(string $value): DateTime {
27922796 $tmp = new DateTime($value);
2797+ $errors = DateTime::getLastErrors();
2798+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
2799+ throw new Exception('Invalid date-time');
2800+ }
27932801 if (!is_a($tmp, 'DateTime')) {
27942802 throw new Exception('Attribute Error:PullRequest::');
27952803 }
@@ -3032,6 +3040,10 @@ class PullRequest {
30323040 */
30333041 public static function fromCreatedAt(string $value): DateTime {
30343042 $tmp = new DateTime($value);
3043+ $errors = DateTime::getLastErrors();
3044+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
3045+ throw new Exception('Invalid date-time');
3046+ }
30353047 if (!is_a($tmp, 'DateTime')) {
30363048 throw new Exception('Attribute Error:PullRequest::');
30373049 }
@@ -3702,6 +3714,10 @@ class PullRequest {
37023714 */
37033715 public static function fromMergedAt(string $value): DateTime {
37043716 $tmp = new DateTime($value);
3717+ $errors = DateTime::getLastErrors();
3718+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
3719+ throw new Exception('Invalid date-time');
3720+ }
37053721 if (!is_a($tmp, 'DateTime')) {
37063722 throw new Exception('Attribute Error:PullRequest::');
37073723 }
@@ -4338,6 +4354,10 @@ class PullRequest {
43384354 */
43394355 public static function fromUpdatedAt(string $value): DateTime {
43404356 $tmp = new DateTime($value);
4357+ $errors = DateTime::getLastErrors();
4358+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
4359+ throw new Exception('Invalid date-time');
4360+ }
43414361 if (!is_a($tmp, 'DateTime')) {
43424362 throw new Exception('Attribute Error:PullRequest::');
43434363 }
@@ -5873,6 +5893,10 @@ class BaseRepo {
58735893 */
58745894 public static function fromCreatedAt(string $value): DateTime {
58755895 $tmp = new DateTime($value);
5896+ $errors = DateTime::getLastErrors();
5897+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
5898+ throw new Exception('Invalid date-time');
5899+ }
58765900 if (!is_a($tmp, 'DateTime')) {
58775901 throw new Exception('Attribute Error:BaseRepo::');
58785902 }
@@ -7817,6 +7841,10 @@ class BaseRepo {
78177841 */
78187842 public static function fromPushedAt(string $value): DateTime {
78197843 $tmp = new DateTime($value);
7844+ $errors = DateTime::getLastErrors();
7845+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
7846+ throw new Exception('Invalid date-time');
7847+ }
78207848 if (!is_a($tmp, 'DateTime')) {
78217849 throw new Exception('Attribute Error:BaseRepo::');
78227850 }
@@ -8435,6 +8463,10 @@ class BaseRepo {
84358463 */
84368464 public static function fromUpdatedAt(string $value): DateTime {
84378465 $tmp = new DateTime($value);
8466+ $errors = DateTime::getLastErrors();
8467+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
8468+ throw new Exception('Invalid date-time');
8469+ }
84388470 if (!is_a($tmp, 'DateTime')) {
84398471 throw new Exception('Attribute Error:BaseRepo::');
84408472 }
Mswiftdefault / quicktype.swift+1 −1
@@ -1242,7 +1242,7 @@ func newJSONDecoder() -> JSONDecoder {
12421242 let decoder = JSONDecoder()
12431243 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
12441244 let container = try decoder.singleValueContainer()
1245- let dateStr = try container.decode(String.self)
1245+ let dateStr = try container.decode(String.self).uppercased()
12461246
12471247 let formatter = DateFormatter()
12481248 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/0b91a.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -355,7 +355,7 @@ func newJSONDecoder() -> JSONDecoder {
355355 let decoder = JSONDecoder()
356356 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
357357 let container = try decoder.singleValueContainer()
358- let dateStr = try container.decode(String.self)
358+ let dateStr = try container.decode(String.self).uppercased()
359359
360360 let formatter = DateFormatter()
361361 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/0cffa.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -731,7 +731,7 @@ func newJSONDecoder() -> JSONDecoder {
731731 let decoder = JSONDecoder()
732732 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
733733 let container = try decoder.singleValueContainer()
734- let dateStr = try container.decode(String.self)
734+ let dateStr = try container.decode(String.self).uppercased()
735735
736736 let formatter = DateFormatter()
737737 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/0e0c2.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -526,7 +526,7 @@ func newJSONDecoder() -> JSONDecoder {
526526 let decoder = JSONDecoder()
527527 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
528528 let container = try decoder.singleValueContainer()
529- let dateStr = try container.decode(String.self)
529+ let dateStr = try container.decode(String.self).uppercased()
530530
531531 let formatter = DateFormatter()
532532 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/0fecf.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -55,7 +55,7 @@ func newJSONDecoder() -> JSONDecoder {
5555 let decoder = JSONDecoder()
5656 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5757 let container = try decoder.singleValueContainer()
58- let dateStr = try container.decode(String.self)
58+ let dateStr = try container.decode(String.self).uppercased()
5959
6060 let formatter = DateFormatter()
6161 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/10be4.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -348,7 +348,7 @@ func newJSONDecoder() -> JSONDecoder {
348348 let decoder = JSONDecoder()
349349 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
350350 let container = try decoder.singleValueContainer()
351- let dateStr = try container.decode(String.self)
351+ let dateStr = try container.decode(String.self).uppercased()
352352
353353 let formatter = DateFormatter()
354354 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/112b5.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -166,7 +166,7 @@ func newJSONDecoder() -> JSONDecoder {
166166 let decoder = JSONDecoder()
167167 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
168168 let container = try decoder.singleValueContainer()
169- let dateStr = try container.decode(String.self)
169+ let dateStr = try container.decode(String.self).uppercased()
170170
171171 let formatter = DateFormatter()
172172 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/127a1.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -730,7 +730,7 @@ func newJSONDecoder() -> JSONDecoder {
730730 let decoder = JSONDecoder()
731731 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
732732 let container = try decoder.singleValueContainer()
733- let dateStr = try container.decode(String.self)
733+ let dateStr = try container.decode(String.self).uppercased()
734734
735735 let formatter = DateFormatter()
736736 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/13d8d.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -262,7 +262,7 @@ func newJSONDecoder() -> JSONDecoder {
262262 let decoder = JSONDecoder()
263263 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
264264 let container = try decoder.singleValueContainer()
265- let dateStr = try container.decode(String.self)
265+ let dateStr = try container.decode(String.self).uppercased()
266266
267267 let formatter = DateFormatter()
268268 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/14d38.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -111,7 +111,7 @@ func newJSONDecoder() -> JSONDecoder {
111111 let decoder = JSONDecoder()
112112 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
113113 let container = try decoder.singleValueContainer()
114- let dateStr = try container.decode(String.self)
114+ let dateStr = try container.decode(String.self).uppercased()
115115
116116 let formatter = DateFormatter()
117117 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/167d6.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -63,7 +63,7 @@ func newJSONDecoder() -> JSONDecoder {
6363 let decoder = JSONDecoder()
6464 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6565 let container = try decoder.singleValueContainer()
66- let dateStr = try container.decode(String.self)
66+ let dateStr = try container.decode(String.self).uppercased()
6767
6868 let formatter = DateFormatter()
6969 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/16bc5.json

4 generated files · +8 −3
Mcplusplusdefault / quicktype.hpp+1 −1
@@ -711,7 +711,7 @@ namespace quicktype {
711711 if (!j.is_object()) throw std::runtime_error("Expected object");
712712 if (j.find("count") != j.end() && !j.at("count").is_number_integer()) throw std::runtime_error("Expected integer");
713713 x.set_count(j.at("count").get<int64_t>());
714- if (j.find("created") != j.end() && !std::regex_match(j.at("created").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
714+ if (j.find("created") != j.end() && !std::regex_match(j.at("created").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
715715 x.set_created(j.at("created").get<std::string>());
716716 x.set_lang(j.at("lang").get<std::string>());
717717 x.set_results(j.at("results").get<Results>());
Mobjective-cdefault / QTTopLevel.m+2 −1
@@ -217,7 +217,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
217217 if (self = [super init]) {
218218 if (![dict[@"count"] isKindOfClass:NSNumber.class]) return nil;
219219 if ([dict[@"count"] doubleValue] != [dict[@"count"] longLongValue]) return nil;
220- if (dict[@"created"] && [dict[@"created"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
220+ if (dict[@"created"] && [dict[@"created"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
221+ if (dict[@"created"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created"] substringToIndex:10]]) return nil;
221222 if (![dict[@"created"] isKindOfClass:NSString.class]) return nil;
222223 if (![dict[@"lang"] isKindOfClass:NSString.class]) return nil;
223224 if (![dict[@"results"] isKindOfClass:NSDictionary.class]) return nil;
Mphpdefault / TopLevel.php+4 −0
@@ -178,6 +178,10 @@ class Query {
178178 */
179179 public static function fromCreated(string $value): DateTime {
180180 $tmp = new DateTime($value);
181+ $errors = DateTime::getLastErrors();
182+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
183+ throw new Exception('Invalid date-time');
184+ }
181185 if (!is_a($tmp, 'DateTime')) {
182186 throw new Exception('Attribute Error:Query::');
183187 }
Mswiftdefault / quicktype.swift+1 −1
@@ -811,7 +811,7 @@ func newJSONDecoder() -> JSONDecoder {
811811 let decoder = JSONDecoder()
812812 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
813813 let container = try decoder.singleValueContainer()
814- let dateStr = try container.decode(String.self)
814+ let dateStr = try container.decode(String.self).uppercased()
815815
816816 let formatter = DateFormatter()
817817 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/176f1.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -267,7 +267,7 @@ func newJSONDecoder() -> JSONDecoder {
267267 let decoder = JSONDecoder()
268268 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
269269 let container = try decoder.singleValueContainer()
270- let dateStr = try container.decode(String.self)
270+ let dateStr = try container.decode(String.self).uppercased()
271271
272272 let formatter = DateFormatter()
273273 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/1a7f5.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -106,7 +106,7 @@ func newJSONDecoder() -> JSONDecoder {
106106 let decoder = JSONDecoder()
107107 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
108108 let container = try decoder.singleValueContainer()
109- let dateStr = try container.decode(String.self)
109+ let dateStr = try container.decode(String.self).uppercased()
110110
111111 let formatter = DateFormatter()
112112 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/1b28c.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -103,7 +103,7 @@ func newJSONDecoder() -> JSONDecoder {
103103 let decoder = JSONDecoder()
104104 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105105 let container = try decoder.singleValueContainer()
106- let dateStr = try container.decode(String.self)
106+ let dateStr = try container.decode(String.self).uppercased()
107107
108108 let formatter = DateFormatter()
109109 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/1b409.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -445,7 +445,7 @@ func newJSONDecoder() -> JSONDecoder {
445445 let decoder = JSONDecoder()
446446 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
447447 let container = try decoder.singleValueContainer()
448- let dateStr = try container.decode(String.self)
448+ let dateStr = try container.decode(String.self).uppercased()
449449
450450 let formatter = DateFormatter()
451451 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/2465e.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -683,7 +683,7 @@ func newJSONDecoder() -> JSONDecoder {
683683 let decoder = JSONDecoder()
684684 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
685685 let container = try decoder.singleValueContainer()
686- let dateStr = try container.decode(String.self)
686+ let dateStr = try container.decode(String.self).uppercased()
687687
688688 let formatter = DateFormatter()
689689 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/24f52.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -271,7 +271,7 @@ func newJSONDecoder() -> JSONDecoder {
271271 let decoder = JSONDecoder()
272272 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
273273 let container = try decoder.singleValueContainer()
274- let dateStr = try container.decode(String.self)
274+ let dateStr = try container.decode(String.self).uppercased()
275275
276276 let formatter = DateFormatter()
277277 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/262f0.json

4 generated files · +8 −3
Mcplusplusdefault / quicktype.hpp+1 −1
@@ -716,7 +716,7 @@ namespace quicktype {
716716 if (!j.is_object()) throw std::runtime_error("Expected object");
717717 if (j.find("count") != j.end() && !j.at("count").is_number_integer()) throw std::runtime_error("Expected integer");
718718 x.set_count(j.at("count").get<int64_t>());
719- if (j.find("created") != j.end() && !std::regex_match(j.at("created").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
719+ if (j.find("created") != j.end() && !std::regex_match(j.at("created").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
720720 x.set_created(j.at("created").get<std::string>());
721721 x.set_lang(j.at("lang").get<std::string>());
722722 x.set_results(j.at("results").get<Results>());
Mobjective-cdefault / QTTopLevel.m+2 −1
@@ -246,7 +246,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
246246 if (self = [super init]) {
247247 if (![dict[@"count"] isKindOfClass:NSNumber.class]) return nil;
248248 if ([dict[@"count"] doubleValue] != [dict[@"count"] longLongValue]) return nil;
249- if (dict[@"created"] && [dict[@"created"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
249+ if (dict[@"created"] && [dict[@"created"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
250+ if (dict[@"created"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created"] substringToIndex:10]]) return nil;
250251 if (![dict[@"created"] isKindOfClass:NSString.class]) return nil;
251252 if (![dict[@"lang"] isKindOfClass:NSString.class]) return nil;
252253 if (![dict[@"results"] isKindOfClass:NSDictionary.class]) return nil;
Mphpdefault / TopLevel.php+4 −0
@@ -178,6 +178,10 @@ class Query {
178178 */
179179 public static function fromCreated(string $value): DateTime {
180180 $tmp = new DateTime($value);
181+ $errors = DateTime::getLastErrors();
182+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
183+ throw new Exception('Invalid date-time');
184+ }
181185 if (!is_a($tmp, 'DateTime')) {
182186 throw new Exception('Attribute Error:Query::');
183187 }
Mswiftdefault / quicktype.swift+1 −1
@@ -817,7 +817,7 @@ func newJSONDecoder() -> JSONDecoder {
817817 let decoder = JSONDecoder()
818818 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
819819 let container = try decoder.singleValueContainer()
820- let dateStr = try container.decode(String.self)
820+ let dateStr = try container.decode(String.self).uppercased()
821821
822822 let formatter = DateFormatter()
823823 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/26b49.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -730,7 +730,7 @@ func newJSONDecoder() -> JSONDecoder {
730730 let decoder = JSONDecoder()
731731 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
732732 let container = try decoder.singleValueContainer()
733- let dateStr = try container.decode(String.self)
733+ let dateStr = try container.decode(String.self).uppercased()
734734
735735 let formatter = DateFormatter()
736736 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/26c9c.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -1474,7 +1474,7 @@ func newJSONDecoder() -> JSONDecoder {
14741474 let decoder = JSONDecoder()
14751475 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
14761476 let container = try decoder.singleValueContainer()
1477- let dateStr = try container.decode(String.self)
1477+ let dateStr = try container.decode(String.self).uppercased()
14781478
14791479 let formatter = DateFormatter()
14801480 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/27332.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -882,7 +882,7 @@ func newJSONDecoder() -> JSONDecoder {
882882 let decoder = JSONDecoder()
883883 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
884884 let container = try decoder.singleValueContainer()
885- let dateStr = try container.decode(String.self)
885+ let dateStr = try container.decode(String.self).uppercased()
886886
887887 let formatter = DateFormatter()
888888 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/29f47.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -816,7 +816,7 @@ func newJSONDecoder() -> JSONDecoder {
816816 let decoder = JSONDecoder()
817817 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
818818 let container = try decoder.singleValueContainer()
819- let dateStr = try container.decode(String.self)
819+ let dateStr = try container.decode(String.self).uppercased()
820820
821821 let formatter = DateFormatter()
822822 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/2d4e2.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -471,7 +471,7 @@ func newJSONDecoder() -> JSONDecoder {
471471 let decoder = JSONDecoder()
472472 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
473473 let container = try decoder.singleValueContainer()
474- let dateStr = try container.decode(String.self)
474+ let dateStr = try container.decode(String.self).uppercased()
475475
476476 let formatter = DateFormatter()
477477 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/2df80.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -300,7 +300,7 @@ func newJSONDecoder() -> JSONDecoder {
300300 let decoder = JSONDecoder()
301301 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
302302 let container = try decoder.singleValueContainer()
303- let dateStr = try container.decode(String.self)
303+ let dateStr = try container.decode(String.self).uppercased()
304304
305305 let formatter = DateFormatter()
306306 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/31189.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -231,7 +231,7 @@ func newJSONDecoder() -> JSONDecoder {
231231 let decoder = JSONDecoder()
232232 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
233233 let container = try decoder.singleValueContainer()
234- let dateStr = try container.decode(String.self)
234+ let dateStr = try container.decode(String.self).uppercased()
235235
236236 let formatter = DateFormatter()
237237 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/32431.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -402,7 +402,7 @@ func newJSONDecoder() -> JSONDecoder {
402402 let decoder = JSONDecoder()
403403 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
404404 let container = try decoder.singleValueContainer()
405- let dateStr = try container.decode(String.self)
405+ let dateStr = try container.decode(String.self).uppercased()
406406
407407 let formatter = DateFormatter()
408408 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/32d5c.json

2 generated files · +5 −1
Mphpdefault / TopLevel.php+4 −0
@@ -42,6 +42,10 @@ class TopLevel {
4242 public static function fromBirthDate(?string $value): ?DateTime {
4343 if (!is_null($value)) {
4444 $tmp = new DateTime($value);
45+ $errors = DateTime::getLastErrors();
46+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
47+ throw new Exception('Invalid date-time');
48+ }
4549 if (!is_a($tmp, 'DateTime')) {
4650 throw new Exception('Attribute Error:TopLevel::');
4751 }
Mswiftdefault / quicktype.swift+1 −1
@@ -110,7 +110,7 @@ func newJSONDecoder() -> JSONDecoder {
110110 let decoder = JSONDecoder()
111111 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
112112 let container = try decoder.singleValueContainer()
113- let dateStr = try container.decode(String.self)
113+ let dateStr = try container.decode(String.self).uppercased()
114114
115115 let formatter = DateFormatter()
116116 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/337ed.json

4 generated files · +43 −13
Mcplusplusdefault / quicktype.hpp+6 −6
@@ -386,13 +386,13 @@ namespace quicktype {
386386 if (!j.is_object()) throw std::runtime_error("Expected object");
387387 if (j.find("amount") != j.end() && !j.at("amount").is_number_integer()) throw std::runtime_error("Expected integer");
388388 x.set_amount(j.at("amount").get<int64_t>());
389- if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
389+ if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
390390 x.set_created_at(j.at("created_at").get<std::string>());
391391 x.set_id(j.at("id").get<std::string>());
392392 x.set_name(j.at("name").get<std::string>());
393393 x.set_status(j.at("status").get<Status>());
394394 x.set_type(j.at("type").get<CustomIncomeType>());
395- if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
395+ if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
396396 x.set_updated_at(j.at("updated_at").get<std::string>());
397397 x.set_uri(j.at("uri").get<std::string>());
398398 }
@@ -417,12 +417,12 @@ namespace quicktype {
417417 x.set_cost_max(get_stack_optional<int64_t>(j, "cost_max"));
418418 j.at("cost_min");
419419 x.set_cost_min(get_stack_optional<int64_t>(j, "cost_min"));
420- if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
420+ if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
421421 x.set_created_at(j.at("created_at").get<std::string>());
422422 x.set_custom_incomes(j.at("customIncomes").get<std::vector<CustomIncome>>());
423423 x.set_direct_rep_costs_max(get_untyped(j, "direct_rep_costs_max"));
424424 x.set_direct_rep_costs_min(get_untyped(j, "direct_rep_costs_min"));
425- if (j.find("end_date") != j.end() && !std::regex_match(j.at("end_date").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
425+ if (j.find("end_date") != j.end() && !std::regex_match(j.at("end_date").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
426426 x.set_end_date(j.at("end_date").get<std::string>());
427427 if (j.find("eur_sources_grants") != j.end() && !j.at("eur_sources_grants").is_number_integer()) throw std::runtime_error("Expected integer");
428428 x.set_eur_sources_grants(j.at("eur_sources_grants").get<int64_t>());
@@ -451,7 +451,7 @@ namespace quicktype {
451451 j.at("public_financing_total");
452452 x.set_public_financing_total(get_stack_optional<int64_t>(j, "public_financing_total"));
453453 x.set_representative(j.at("representative").get<std::string>());
454- if (j.find("start_date") != j.end() && !std::regex_match(j.at("start_date").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
454+ if (j.find("start_date") != j.end() && !std::regex_match(j.at("start_date").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
455455 x.set_start_date(j.at("start_date").get<std::string>());
456456 x.set_status(j.at("status").get<Status>());
457457 j.at("total_budget");
@@ -463,7 +463,7 @@ namespace quicktype {
463463 j.at("turnover_min");
464464 x.set_turnover_min(get_stack_optional<int64_t>(j, "turnover_min"));
465465 x.set_type(j.at("type").get<ResultType>());
466- if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
466+ if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
467467 x.set_updated_at(j.at("updated_at").get<std::string>());
468468 x.set_uri(j.at("uri").get<std::string>());
469469 }
Mobjective-cdefault / QTTopLevel.m+12 −6
@@ -344,12 +344,14 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
344344 if (!dict[@"cost_absolute"]) return nil;
345345 if (!dict[@"cost_max"]) return nil;
346346 if (!dict[@"cost_min"]) return nil;
347- if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
347+ if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
348+ if (dict[@"created_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created_at"] substringToIndex:10]]) return nil;
348349 if (![dict[@"created_at"] isKindOfClass:NSString.class]) return nil;
349350 if (![dict[@"customIncomes"] isKindOfClass:NSArray.class]) return nil;
350351 if (!dict[@"direct_rep_costs_max"]) return nil;
351352 if (!dict[@"direct_rep_costs_min"]) return nil;
352- if (dict[@"end_date"] && [dict[@"end_date"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
353+ if (dict[@"end_date"] && [dict[@"end_date"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
354+ if (dict[@"end_date"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"end_date"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"end_date"] substringToIndex:10]]) return nil;
353355 if (![dict[@"end_date"] isKindOfClass:NSString.class]) return nil;
354356 if (![dict[@"eur_sources_grants"] isKindOfClass:NSNumber.class]) return nil;
355357 if ([dict[@"eur_sources_grants"] doubleValue] != [dict[@"eur_sources_grants"] longLongValue]) return nil;
@@ -367,7 +369,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
367369 if (!dict[@"public_financing_national"]) return nil;
368370 if (!dict[@"public_financing_total"]) return nil;
369371 if (![dict[@"representative"] isKindOfClass:NSString.class]) return nil;
370- if (dict[@"start_date"] && [dict[@"start_date"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
372+ if (dict[@"start_date"] && [dict[@"start_date"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
373+ if (dict[@"start_date"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"start_date"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"start_date"] substringToIndex:10]]) return nil;
371374 if (![dict[@"start_date"] isKindOfClass:NSString.class]) return nil;
372375 if (![dict[@"status"] isKindOfClass:NSString.class]) return nil;
373376 if (!dict[@"new_organisation"]) return nil;
@@ -376,7 +379,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
376379 if (!dict[@"turnover_max"]) return nil;
377380 if (!dict[@"turnover_min"]) return nil;
378381 if (![dict[@"type"] isKindOfClass:NSString.class]) return nil;
379- if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
382+ if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
383+ if (dict[@"updated_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"updated_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"updated_at"] substringToIndex:10]]) return nil;
380384 if (![dict[@"updated_at"] isKindOfClass:NSString.class]) return nil;
381385 if (![dict[@"uri"] isKindOfClass:NSString.class]) return nil;
382386 [self setValuesForKeysWithDictionary:dict];
@@ -447,13 +451,15 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
447451 if (self = [super init]) {
448452 if (![dict[@"amount"] isKindOfClass:NSNumber.class]) return nil;
449453 if ([dict[@"amount"] doubleValue] != [dict[@"amount"] longLongValue]) return nil;
450- if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
454+ if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
455+ if (dict[@"created_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created_at"] substringToIndex:10]]) return nil;
451456 if (![dict[@"created_at"] isKindOfClass:NSString.class]) return nil;
452457 if (![dict[@"id"] isKindOfClass:NSString.class]) return nil;
453458 if (![dict[@"name"] isKindOfClass:NSString.class]) return nil;
454459 if (![dict[@"status"] isKindOfClass:NSString.class]) return nil;
455460 if (![dict[@"type"] isKindOfClass:NSString.class]) return nil;
456- if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
461+ if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
462+ if (dict[@"updated_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"updated_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"updated_at"] substringToIndex:10]]) return nil;
457463 if (![dict[@"updated_at"] isKindOfClass:NSString.class]) return nil;
458464 if (![dict[@"uri"] isKindOfClass:NSString.class]) return nil;
459465 [self setValuesForKeysWithDictionary:dict];
Mphpdefault / TopLevel.php+24 −0
@@ -785,6 +785,10 @@ class Result {
785785 */
786786 public static function fromCreatedAt(string $value): DateTime {
787787 $tmp = new DateTime($value);
788+ $errors = DateTime::getLastErrors();
789+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
790+ throw new Exception('Invalid date-time');
791+ }
788792 if (!is_a($tmp, 'DateTime')) {
789793 throw new Exception('Attribute Error:Result::');
790794 }
@@ -998,6 +1002,10 @@ class Result {
9981002 */
9991003 public static function fromEndDate(string $value): DateTime {
10001004 $tmp = new DateTime($value);
1005+ $errors = DateTime::getLastErrors();
1006+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
1007+ throw new Exception('Invalid date-time');
1008+ }
10011009 if (!is_a($tmp, 'DateTime')) {
10021010 throw new Exception('Attribute Error:Result::');
10031011 }
@@ -1860,6 +1868,10 @@ class Result {
18601868 */
18611869 public static function fromStartDate(string $value): DateTime {
18621870 $tmp = new DateTime($value);
1871+ $errors = DateTime::getLastErrors();
1872+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
1873+ throw new Exception('Invalid date-time');
1874+ }
18631875 if (!is_a($tmp, 'DateTime')) {
18641876 throw new Exception('Attribute Error:Result::');
18651877 }
@@ -2238,6 +2250,10 @@ class Result {
22382250 */
22392251 public static function fromUpdatedAt(string $value): DateTime {
22402252 $tmp = new DateTime($value);
2253+ $errors = DateTime::getLastErrors();
2254+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
2255+ throw new Exception('Invalid date-time');
2256+ }
22412257 if (!is_a($tmp, 'DateTime')) {
22422258 throw new Exception('Attribute Error:Result::');
22432259 }
@@ -2678,6 +2694,10 @@ class CustomIncome {
26782694 */
26792695 public static function fromCreatedAt(string $value): DateTime {
26802696 $tmp = new DateTime($value);
2697+ $errors = DateTime::getLastErrors();
2698+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
2699+ throw new Exception('Invalid date-time');
2700+ }
26812701 if (!is_a($tmp, 'DateTime')) {
26822702 throw new Exception('Attribute Error:CustomIncome::');
26832703 }
@@ -2922,6 +2942,10 @@ class CustomIncome {
29222942 */
29232943 public static function fromUpdatedAt(string $value): DateTime {
29242944 $tmp = new DateTime($value);
2945+ $errors = DateTime::getLastErrors();
2946+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
2947+ throw new Exception('Invalid date-time');
2948+ }
29252949 if (!is_a($tmp, 'DateTime')) {
29262950 throw new Exception('Attribute Error:CustomIncome::');
29272951 }
Mswiftdefault / quicktype.swift+1 −1
@@ -378,7 +378,7 @@ func newJSONDecoder() -> JSONDecoder {
378378 let decoder = JSONDecoder()
379379 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
380380 let container = try decoder.singleValueContainer()
381- let dateStr = try container.decode(String.self)
381+ let dateStr = try container.decode(String.self).uppercased()
382382
383383 let formatter = DateFormatter()
384384 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/33d2e.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -306,7 +306,7 @@ func newJSONDecoder() -> JSONDecoder {
306306 let decoder = JSONDecoder()
307307 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
308308 let container = try decoder.singleValueContainer()
309- let dateStr = try container.decode(String.self)
309+ let dateStr = try container.decode(String.self).uppercased()
310310
311311 let formatter = DateFormatter()
312312 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/34702.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -418,7 +418,7 @@ func newJSONDecoder() -> JSONDecoder {
418418 let decoder = JSONDecoder()
419419 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
420420 let container = try decoder.singleValueContainer()
421- let dateStr = try container.decode(String.self)
421+ let dateStr = try container.decode(String.self).uppercased()
422422
423423 let formatter = DateFormatter()
424424 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/3536b.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -270,7 +270,7 @@ func newJSONDecoder() -> JSONDecoder {
270270 let decoder = JSONDecoder()
271271 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
272272 let container = try decoder.singleValueContainer()
273- let dateStr = try container.decode(String.self)
273+ let dateStr = try container.decode(String.self).uppercased()
274274
275275 let formatter = DateFormatter()
276276 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/3659d.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -103,7 +103,7 @@ func newJSONDecoder() -> JSONDecoder {
103103 let decoder = JSONDecoder()
104104 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105105 let container = try decoder.singleValueContainer()
106- let dateStr = try container.decode(String.self)
106+ let dateStr = try container.decode(String.self).uppercased()
107107
108108 let formatter = DateFormatter()
109109 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/36d5d.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -271,7 +271,7 @@ func newJSONDecoder() -> JSONDecoder {
271271 let decoder = JSONDecoder()
272272 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
273273 let container = try decoder.singleValueContainer()
274- let dateStr = try container.decode(String.self)
274+ let dateStr = try container.decode(String.self).uppercased()
275275
276276 let formatter = DateFormatter()
277277 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/3a6b3.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -271,7 +271,7 @@ func newJSONDecoder() -> JSONDecoder {
271271 let decoder = JSONDecoder()
272272 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
273273 let container = try decoder.singleValueContainer()
274- let dateStr = try container.decode(String.self)
274+ let dateStr = try container.decode(String.self).uppercased()
275275
276276 let formatter = DateFormatter()
277277 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/3e9a3.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -267,7 +267,7 @@ func newJSONDecoder() -> JSONDecoder {
267267 let decoder = JSONDecoder()
268268 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
269269 let container = try decoder.singleValueContainer()
270- let dateStr = try container.decode(String.self)
270+ let dateStr = try container.decode(String.self).uppercased()
271271
272272 let formatter = DateFormatter()
273273 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/3f1ce.json

4 generated files · +8 −3
Mcplusplusdefault / quicktype.hpp+1 −1
@@ -716,7 +716,7 @@ namespace quicktype {
716716 if (!j.is_object()) throw std::runtime_error("Expected object");
717717 if (j.find("count") != j.end() && !j.at("count").is_number_integer()) throw std::runtime_error("Expected integer");
718718 x.set_count(j.at("count").get<int64_t>());
719- if (j.find("created") != j.end() && !std::regex_match(j.at("created").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
719+ if (j.find("created") != j.end() && !std::regex_match(j.at("created").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
720720 x.set_created(j.at("created").get<std::string>());
721721 x.set_lang(j.at("lang").get<std::string>());
722722 x.set_results(j.at("results").get<Results>());
Mobjective-cdefault / QTTopLevel.m+2 −1
@@ -242,7 +242,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
242242 if (self = [super init]) {
243243 if (![dict[@"count"] isKindOfClass:NSNumber.class]) return nil;
244244 if ([dict[@"count"] doubleValue] != [dict[@"count"] longLongValue]) return nil;
245- if (dict[@"created"] && [dict[@"created"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
245+ if (dict[@"created"] && [dict[@"created"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
246+ if (dict[@"created"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created"] substringToIndex:10]]) return nil;
246247 if (![dict[@"created"] isKindOfClass:NSString.class]) return nil;
247248 if (![dict[@"lang"] isKindOfClass:NSString.class]) return nil;
248249 if (![dict[@"results"] isKindOfClass:NSDictionary.class]) return nil;
Mphpdefault / TopLevel.php+4 −0
@@ -178,6 +178,10 @@ class Query {
178178 */
179179 public static function fromCreated(string $value): DateTime {
180180 $tmp = new DateTime($value);
181+ $errors = DateTime::getLastErrors();
182+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
183+ throw new Exception('Invalid date-time');
184+ }
181185 if (!is_a($tmp, 'DateTime')) {
182186 throw new Exception('Attribute Error:Query::');
183187 }
Mswiftdefault / quicktype.swift+1 −1
@@ -815,7 +815,7 @@ func newJSONDecoder() -> JSONDecoder {
815815 let decoder = JSONDecoder()
816816 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
817817 let container = try decoder.singleValueContainer()
818- let dateStr = try container.decode(String.self)
818+ let dateStr = try container.decode(String.self).uppercased()
819819
820820 let formatter = DateFormatter()
821821 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/421d4.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -877,7 +877,7 @@ func newJSONDecoder() -> JSONDecoder {
877877 let decoder = JSONDecoder()
878878 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
879879 let container = try decoder.singleValueContainer()
880- let dateStr = try container.decode(String.self)
880+ let dateStr = try container.decode(String.self).uppercased()
881881
882882 let formatter = DateFormatter()
883883 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/437e7.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -718,7 +718,7 @@ func newJSONDecoder() -> JSONDecoder {
718718 let decoder = JSONDecoder()
719719 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
720720 let container = try decoder.singleValueContainer()
721- let dateStr = try container.decode(String.self)
721+ let dateStr = try container.decode(String.self).uppercased()
722722
723723 let formatter = DateFormatter()
724724 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/43970.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -90,7 +90,7 @@ func newJSONDecoder() -> JSONDecoder {
9090 let decoder = JSONDecoder()
9191 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
9292 let container = try decoder.singleValueContainer()
93- let dateStr = try container.decode(String.self)
93+ let dateStr = try container.decode(String.self).uppercased()
9494
9595 let formatter = DateFormatter()
9696 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/43eaf.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -63,7 +63,7 @@ func newJSONDecoder() -> JSONDecoder {
6363 let decoder = JSONDecoder()
6464 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6565 let container = try decoder.singleValueContainer()
66- let dateStr = try container.decode(String.self)
66+ let dateStr = try container.decode(String.self).uppercased()
6767
6868 let formatter = DateFormatter()
6969 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/458db.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -355,7 +355,7 @@ func newJSONDecoder() -> JSONDecoder {
355355 let decoder = JSONDecoder()
356356 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
357357 let container = try decoder.singleValueContainer()
358- let dateStr = try container.decode(String.self)
358+ let dateStr = try container.decode(String.self).uppercased()
359359
360360 let formatter = DateFormatter()
361361 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/4961a.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -103,7 +103,7 @@ func newJSONDecoder() -> JSONDecoder {
103103 let decoder = JSONDecoder()
104104 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105105 let container = try decoder.singleValueContainer()
106- let dateStr = try container.decode(String.self)
106+ let dateStr = try container.decode(String.self).uppercased()
107107
108108 let formatter = DateFormatter()
109109 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/4a0d7.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -103,7 +103,7 @@ func newJSONDecoder() -> JSONDecoder {
103103 let decoder = JSONDecoder()
104104 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105105 let container = try decoder.singleValueContainer()
106- let dateStr = try container.decode(String.self)
106+ let dateStr = try container.decode(String.self).uppercased()
107107
108108 let formatter = DateFormatter()
109109 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/4a455.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -343,7 +343,7 @@ func newJSONDecoder() -> JSONDecoder {
343343 let decoder = JSONDecoder()
344344 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
345345 let container = try decoder.singleValueContainer()
346- let dateStr = try container.decode(String.self)
346+ let dateStr = try container.decode(String.self).uppercased()
347347
348348 let formatter = DateFormatter()
349349 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/4c547.json

4 generated files · +8 −3
Mcplusplusdefault / quicktype.hpp+1 −1
@@ -711,7 +711,7 @@ namespace quicktype {
711711 if (!j.is_object()) throw std::runtime_error("Expected object");
712712 if (j.find("count") != j.end() && !j.at("count").is_number_integer()) throw std::runtime_error("Expected integer");
713713 x.set_count(j.at("count").get<int64_t>());
714- if (j.find("created") != j.end() && !std::regex_match(j.at("created").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
714+ if (j.find("created") != j.end() && !std::regex_match(j.at("created").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
715715 x.set_created(j.at("created").get<std::string>());
716716 x.set_lang(j.at("lang").get<std::string>());
717717 x.set_results(j.at("results").get<Results>());
Mobjective-cdefault / QTTopLevel.m+2 −1
@@ -217,7 +217,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
217217 if (self = [super init]) {
218218 if (![dict[@"count"] isKindOfClass:NSNumber.class]) return nil;
219219 if ([dict[@"count"] doubleValue] != [dict[@"count"] longLongValue]) return nil;
220- if (dict[@"created"] && [dict[@"created"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
220+ if (dict[@"created"] && [dict[@"created"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
221+ if (dict[@"created"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created"] substringToIndex:10]]) return nil;
221222 if (![dict[@"created"] isKindOfClass:NSString.class]) return nil;
222223 if (![dict[@"lang"] isKindOfClass:NSString.class]) return nil;
223224 if (![dict[@"results"] isKindOfClass:NSDictionary.class]) return nil;
Mphpdefault / TopLevel.php+4 −0
@@ -178,6 +178,10 @@ class Query {
178178 */
179179 public static function fromCreated(string $value): DateTime {
180180 $tmp = new DateTime($value);
181+ $errors = DateTime::getLastErrors();
182+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
183+ throw new Exception('Invalid date-time');
184+ }
181185 if (!is_a($tmp, 'DateTime')) {
182186 throw new Exception('Attribute Error:Query::');
183187 }
Mswiftdefault / quicktype.swift+1 −1
@@ -811,7 +811,7 @@ func newJSONDecoder() -> JSONDecoder {
811811 let decoder = JSONDecoder()
812812 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
813813 let container = try decoder.singleValueContainer()
814- let dateStr = try container.decode(String.self)
814+ let dateStr = try container.decode(String.self).uppercased()
815815
816816 let formatter = DateFormatter()
817817 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/4d6fb.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -879,7 +879,7 @@ func newJSONDecoder() -> JSONDecoder {
879879 let decoder = JSONDecoder()
880880 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
881881 let container = try decoder.singleValueContainer()
882- let dateStr = try container.decode(String.self)
882+ let dateStr = try container.decode(String.self).uppercased()
883883
884884 let formatter = DateFormatter()
885885 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/4e336.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -103,7 +103,7 @@ func newJSONDecoder() -> JSONDecoder {
103103 let decoder = JSONDecoder()
104104 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105105 let container = try decoder.singleValueContainer()
106- let dateStr = try container.decode(String.self)
106+ let dateStr = try container.decode(String.self).uppercased()
107107
108108 let formatter = DateFormatter()
109109 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/54147.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -178,7 +178,7 @@ func newJSONDecoder() -> JSONDecoder {
178178 let decoder = JSONDecoder()
179179 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
180180 let container = try decoder.singleValueContainer()
181- let dateStr = try container.decode(String.self)
181+ let dateStr = try container.decode(String.self).uppercased()
182182
183183 let formatter = DateFormatter()
184184 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/54d32.json

4 generated files · +15 −5
Mcplusplusdefault / quicktype.hpp+2 −2
@@ -153,13 +153,13 @@ namespace quicktype {
153153
154154 inline void from_json(const json & j, Result& x) {
155155 if (!j.is_object()) throw std::runtime_error("Expected object");
156- if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
156+ if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
157157 x.set_created_at(j.at("created_at").get<std::string>());
158158 x.set_id(j.at("id").get<std::string>());
159159 x.set_person_id(j.at("person_id").get<std::string>());
160160 x.set_representative_id(j.at("representative_id").get<std::string>());
161161 x.set_status(j.at("status").get<Status>());
162- if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
162+ if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
163163 x.set_updated_at(j.at("updated_at").get<std::string>());
164164 }
Mobjective-cdefault / QTTopLevel.m+4 −2
@@ -254,13 +254,15 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
254254 - (instancetype)initWithJSONDictionary:(NSDictionary *)dict
255255 {
256256 if (self = [super init]) {
257- if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
257+ if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
258+ if (dict[@"created_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created_at"] substringToIndex:10]]) return nil;
258259 if (![dict[@"created_at"] isKindOfClass:NSString.class]) return nil;
259260 if (![dict[@"id"] isKindOfClass:NSString.class]) return nil;
260261 if (![dict[@"person_id"] isKindOfClass:NSString.class]) return nil;
261262 if (![dict[@"representative_id"] isKindOfClass:NSString.class]) return nil;
262263 if (![dict[@"status"] isKindOfClass:NSString.class]) return nil;
263- if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
264+ if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
265+ if (dict[@"updated_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"updated_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"updated_at"] substringToIndex:10]]) return nil;
264266 if (![dict[@"updated_at"] isKindOfClass:NSString.class]) return nil;
265267 [self setValuesForKeysWithDictionary:dict];
266268 _status = [QTStatus withValue:(id)_status];
Mphpdefault / TopLevel.php+8 −0
@@ -536,6 +536,10 @@ class Result {
536536 */
537537 public static function fromCreatedAt(string $value): DateTime {
538538 $tmp = new DateTime($value);
539+ $errors = DateTime::getLastErrors();
540+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
541+ throw new Exception('Invalid date-time');
542+ }
539543 if (!is_a($tmp, 'DateTime')) {
540544 throw new Exception('Attribute Error:Result::');
541545 }
@@ -779,6 +783,10 @@ class Result {
779783 */
780784 public static function fromUpdatedAt(string $value): DateTime {
781785 $tmp = new DateTime($value);
786+ $errors = DateTime::getLastErrors();
787+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
788+ throw new Exception('Invalid date-time');
789+ }
782790 if (!is_a($tmp, 'DateTime')) {
783791 throw new Exception('Attribute Error:Result::');
784792 }
Mswiftdefault / quicktype.swift+1 −1
@@ -191,7 +191,7 @@ func newJSONDecoder() -> JSONDecoder {
191191 let decoder = JSONDecoder()
192192 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
193193 let container = try decoder.singleValueContainer()
194- let dateStr = try container.decode(String.self)
194+ let dateStr = try container.decode(String.self).uppercased()
195195
196196 let formatter = DateFormatter()
197197 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/570ec.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -312,7 +312,7 @@ func newJSONDecoder() -> JSONDecoder {
312312 let decoder = JSONDecoder()
313313 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
314314 let container = try decoder.singleValueContainer()
315- let dateStr = try container.decode(String.self)
315+ let dateStr = try container.decode(String.self).uppercased()
316316
317317 let formatter = DateFormatter()
318318 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/5dd0d.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -271,7 +271,7 @@ func newJSONDecoder() -> JSONDecoder {
271271 let decoder = JSONDecoder()
272272 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
273273 let container = try decoder.singleValueContainer()
274- let dateStr = try container.decode(String.self)
274+ let dateStr = try container.decode(String.self).uppercased()
275275
276276 let formatter = DateFormatter()
277277 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/5eae5.json

4 generated files · +8 −3
Mcplusplusdefault / quicktype.hpp+1 −1
@@ -69,7 +69,7 @@ namespace quicktype {
6969
7070 inline void from_json(const json & j, TopLevelElement& x) {
7171 if (!j.is_object()) throw std::runtime_error("Expected object");
72- if (j.find("Date") != j.end() && !std::regex_match(j.at("Date").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
72+ if (j.find("Date") != j.end() && !std::regex_match(j.at("Date").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
7373 x.set_date(j.at("Date").get<std::string>());
7474 if (j.find("ID") != j.end() && !j.at("ID").is_number_integer()) throw std::runtime_error("Expected integer");
7575 x.set_id(j.at("ID").get<int64_t>());
Mobjective-cdefault / QTTopLevel.m+2 −1
@@ -82,7 +82,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
8282 - (instancetype)initWithJSONDictionary:(NSDictionary *)dict
8383 {
8484 if (self = [super init]) {
85- if (dict[@"Date"] && [dict[@"Date"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
85+ if (dict[@"Date"] && [dict[@"Date"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
86+ if (dict[@"Date"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"Date"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"Date"] substringToIndex:10]]) return nil;
8687 if (![dict[@"Date"] isKindOfClass:NSString.class]) return nil;
8788 if (![dict[@"ID"] isKindOfClass:NSNumber.class]) return nil;
8889 if ([dict[@"ID"] doubleValue] != [dict[@"ID"] longLongValue]) return nil;
Mphpdefault / TopLevel.php+4 −0
@@ -29,6 +29,10 @@ class TopLevel {
2929 */
3030 public static function fromDate(string $value): DateTime {
3131 $tmp = new DateTime($value);
32+ $errors = DateTime::getLastErrors();
33+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
34+ throw new Exception('Invalid date-time');
35+ }
3236 if (!is_a($tmp, 'DateTime')) {
3337 throw new Exception('Attribute Error:TopLevel::');
3438 }
Mswiftdefault / quicktype.swift+1 −1
@@ -94,7 +94,7 @@ func newJSONDecoder() -> JSONDecoder {
9494 let decoder = JSONDecoder()
9595 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
9696 let container = try decoder.singleValueContainer()
97- let dateStr = try container.decode(String.self)
97+ let dateStr = try container.decode(String.self).uppercased()
9898
9999 let formatter = DateFormatter()
100100 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/5eb20.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -271,7 +271,7 @@ func newJSONDecoder() -> JSONDecoder {
271271 let decoder = JSONDecoder()
272272 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
273273 let container = try decoder.singleValueContainer()
274- let dateStr = try container.decode(String.self)
274+ let dateStr = try container.decode(String.self).uppercased()
275275
276276 let formatter = DateFormatter()
277277 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/5f3a1.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -63,7 +63,7 @@ func newJSONDecoder() -> JSONDecoder {
6363 let decoder = JSONDecoder()
6464 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6565 let container = try decoder.singleValueContainer()
66- let dateStr = try container.decode(String.self)
66+ let dateStr = try container.decode(String.self).uppercased()
6767
6868 let formatter = DateFormatter()
6969 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/5f7fe.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -1464,7 +1464,7 @@ func newJSONDecoder() -> JSONDecoder {
14641464 let decoder = JSONDecoder()
14651465 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
14661466 let container = try decoder.singleValueContainer()
1467- let dateStr = try container.decode(String.self)
1467+ let dateStr = try container.decode(String.self).uppercased()
14681468
14691469 let formatter = DateFormatter()
14701470 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/617e8.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -1460,7 +1460,7 @@ func newJSONDecoder() -> JSONDecoder {
14601460 let decoder = JSONDecoder()
14611461 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
14621462 let container = try decoder.singleValueContainer()
1463- let dateStr = try container.decode(String.self)
1463+ let dateStr = try container.decode(String.self).uppercased()
14641464
14651465 let formatter = DateFormatter()
14661466 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/61b66.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -271,7 +271,7 @@ func newJSONDecoder() -> JSONDecoder {
271271 let decoder = JSONDecoder()
272272 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
273273 let container = try decoder.singleValueContainer()
274- let dateStr = try container.decode(String.self)
274+ let dateStr = try container.decode(String.self).uppercased()
275275
276276 let formatter = DateFormatter()
277277 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/6260a.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -63,7 +63,7 @@ func newJSONDecoder() -> JSONDecoder {
6363 let decoder = JSONDecoder()
6464 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6565 let container = try decoder.singleValueContainer()
66- let dateStr = try container.decode(String.self)
66+ let dateStr = try container.decode(String.self).uppercased()
6767
6868 let formatter = DateFormatter()
6969 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/65dec.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -385,7 +385,7 @@ func newJSONDecoder() -> JSONDecoder {
385385 let decoder = JSONDecoder()
386386 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
387387 let container = try decoder.singleValueContainer()
388- let dateStr = try container.decode(String.self)
388+ let dateStr = try container.decode(String.self).uppercased()
389389
390390 let formatter = DateFormatter()
391391 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/66121.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -282,7 +282,7 @@ func newJSONDecoder() -> JSONDecoder {
282282 let decoder = JSONDecoder()
283283 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
284284 let container = try decoder.singleValueContainer()
285- let dateStr = try container.decode(String.self)
285+ let dateStr = try container.decode(String.self).uppercased()
286286
287287 let formatter = DateFormatter()
288288 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/6617c.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -111,7 +111,7 @@ func newJSONDecoder() -> JSONDecoder {
111111 let decoder = JSONDecoder()
112112 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
113113 let container = try decoder.singleValueContainer()
114- let dateStr = try container.decode(String.self)
114+ let dateStr = try container.decode(String.self).uppercased()
115115
116116 let formatter = DateFormatter()
117117 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/67c03.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -111,7 +111,7 @@ func newJSONDecoder() -> JSONDecoder {
111111 let decoder = JSONDecoder()
112112 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
113113 let container = try decoder.singleValueContainer()
114- let dateStr = try container.decode(String.self)
114+ let dateStr = try container.decode(String.self).uppercased()
115115
116116 let formatter = DateFormatter()
117117 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/68c30.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -263,7 +263,7 @@ func newJSONDecoder() -> JSONDecoder {
263263 let decoder = JSONDecoder()
264264 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
265265 let container = try decoder.singleValueContainer()
266- let dateStr = try container.decode(String.self)
266+ let dateStr = try container.decode(String.self).uppercased()
267267
268268 let formatter = DateFormatter()
269269 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/6c155.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -435,7 +435,7 @@ func newJSONDecoder() -> JSONDecoder {
435435 let decoder = JSONDecoder()
436436 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
437437 let container = try decoder.singleValueContainer()
438- let dateStr = try container.decode(String.self)
438+ let dateStr = try container.decode(String.self).uppercased()
439439
440440 let formatter = DateFormatter()
441441 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/6de06.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -925,7 +925,7 @@ func newJSONDecoder() -> JSONDecoder {
925925 let decoder = JSONDecoder()
926926 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
927927 let container = try decoder.singleValueContainer()
928- let dateStr = try container.decode(String.self)
928+ let dateStr = try container.decode(String.self).uppercased()
929929
930930 let formatter = DateFormatter()
931931 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/6dec6.json

4 generated files · +8 −3
Mcplusplusdefault / quicktype.hpp+1 −1
@@ -716,7 +716,7 @@ namespace quicktype {
716716 if (!j.is_object()) throw std::runtime_error("Expected object");
717717 if (j.find("count") != j.end() && !j.at("count").is_number_integer()) throw std::runtime_error("Expected integer");
718718 x.set_count(j.at("count").get<int64_t>());
719- if (j.find("created") != j.end() && !std::regex_match(j.at("created").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
719+ if (j.find("created") != j.end() && !std::regex_match(j.at("created").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
720720 x.set_created(j.at("created").get<std::string>());
721721 x.set_lang(j.at("lang").get<std::string>());
722722 x.set_results(j.at("results").get<Results>());
Mobjective-cdefault / QTTopLevel.m+2 −1
@@ -246,7 +246,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
246246 if (self = [super init]) {
247247 if (![dict[@"count"] isKindOfClass:NSNumber.class]) return nil;
248248 if ([dict[@"count"] doubleValue] != [dict[@"count"] longLongValue]) return nil;
249- if (dict[@"created"] && [dict[@"created"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
249+ if (dict[@"created"] && [dict[@"created"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
250+ if (dict[@"created"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created"] substringToIndex:10]]) return nil;
250251 if (![dict[@"created"] isKindOfClass:NSString.class]) return nil;
251252 if (![dict[@"lang"] isKindOfClass:NSString.class]) return nil;
252253 if (![dict[@"results"] isKindOfClass:NSDictionary.class]) return nil;
Mphpdefault / TopLevel.php+4 −0
@@ -178,6 +178,10 @@ class Query {
178178 */
179179 public static function fromCreated(string $value): DateTime {
180180 $tmp = new DateTime($value);
181+ $errors = DateTime::getLastErrors();
182+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
183+ throw new Exception('Invalid date-time');
184+ }
181185 if (!is_a($tmp, 'DateTime')) {
182186 throw new Exception('Attribute Error:Query::');
183187 }
Mswiftdefault / quicktype.swift+1 −1
@@ -817,7 +817,7 @@ func newJSONDecoder() -> JSONDecoder {
817817 let decoder = JSONDecoder()
818818 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
819819 let container = try decoder.singleValueContainer()
820- let dateStr = try container.decode(String.self)
820+ let dateStr = try container.decode(String.self).uppercased()
821821
822822 let formatter = DateFormatter()
823823 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/6eb00.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -90,7 +90,7 @@ func newJSONDecoder() -> JSONDecoder {
9090 let decoder = JSONDecoder()
9191 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
9292 let container = try decoder.singleValueContainer()
93- let dateStr = try container.decode(String.self)
93+ let dateStr = try container.decode(String.self).uppercased()
9494
9595 let formatter = DateFormatter()
9696 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/70c77.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -63,7 +63,7 @@ func newJSONDecoder() -> JSONDecoder {
6363 let decoder = JSONDecoder()
6464 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6565 let container = try decoder.singleValueContainer()
66- let dateStr = try container.decode(String.self)
66+ let dateStr = try container.decode(String.self).uppercased()
6767
6868 let formatter = DateFormatter()
6969 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/734ad.json

4 generated files · +29 −9
Mcplusplusdefault / quicktype.hpp+4 −4
@@ -478,7 +478,7 @@ namespace quicktype {
478478 x.set_code_of_conduct(j.at("code_of_conduct").get<std::string>());
479479 if (j.find("contact_country") != j.end() && !j.at("contact_country").is_number_integer()) throw std::runtime_error("Expected integer");
480480 x.set_contact_country(j.at("contact_country").get<int64_t>());
481- if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
481+ if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
482482 x.set_created_at(j.at("created_at").get<std::string>());
483483 x.set_entity(j.at("entity").get<std::string>());
484484 x.set_goals(j.at("goals").get<std::string>());
@@ -498,7 +498,7 @@ namespace quicktype {
498498 x.set_id(j.at("id").get<std::string>());
499499 x.set_identification_code(j.at("identification_code").get<std::string>());
500500 x.set_info_members(j.at("info_members").get<std::string>());
501- if (j.find("last_update_date") != j.end() && !std::regex_match(j.at("last_update_date").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
501+ if (j.find("last_update_date") != j.end() && !std::regex_match(j.at("last_update_date").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
502502 x.set_last_update_date(j.at("last_update_date").get<std::string>());
503503 x.set_legal(j.at("legal").get<std::string>());
504504 x.set_legal_status(j.at("legal_status").get<std::string>());
@@ -524,14 +524,14 @@ namespace quicktype {
524524 x.set_number_of_natural_persons(get_stack_optional<int64_t>(j, "number_of_natural_persons"));
525525 j.at("other_code_of_conduct");
526526 x.set_other_code_of_conduct(get_stack_optional<std::string>(j, "other_code_of_conduct"));
527- if (j.find("registration_date") != j.end() && !std::regex_match(j.at("registration_date").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
527+ if (j.find("registration_date") != j.end() && !std::regex_match(j.at("registration_date").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
528528 x.set_registration_date(j.at("registration_date").get<std::string>());
529529 x.set_status(j.at("status").get<Status>());
530530 x.set_structure_members(j.at("structure_members").get<std::string>());
531531 if (j.find("sub_category") != j.end() && !j.at("sub_category").is_number_integer()) throw std::runtime_error("Expected integer");
532532 x.set_sub_category(j.at("sub_category").get<int64_t>());
533533 x.set_sub_category_title(j.at("sub_category_title").get<std::string>());
534- if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
534+ if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
535535 x.set_updated_at(j.at("updated_at").get<std::string>());
536536 x.set_uri(j.at("uri").get<std::string>());
537537 j.at("web_site_url");
Mobjective-cdefault / QTTopLevel.m+8 −4
@@ -318,7 +318,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
318318 if (![dict[@"code_of_conduct"] isKindOfClass:NSString.class]) return nil;
319319 if (![dict[@"contact_country"] isKindOfClass:NSNumber.class]) return nil;
320320 if ([dict[@"contact_country"] doubleValue] != [dict[@"contact_country"] longLongValue]) return nil;
321- if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
321+ if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
322+ if (dict[@"created_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created_at"] substringToIndex:10]]) return nil;
322323 if (![dict[@"created_at"] isKindOfClass:NSString.class]) return nil;
323324 if (![dict[@"entity"] isKindOfClass:NSString.class]) return nil;
324325 if (![dict[@"goals"] isKindOfClass:NSString.class]) return nil;
@@ -334,7 +335,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
334335 if (![dict[@"identification_code"] isKindOfClass:NSString.class]) return nil;
335336 if (![dict[@"id"] isKindOfClass:NSString.class]) return nil;
336337 if (![dict[@"info_members"] isKindOfClass:NSString.class]) return nil;
337- if (dict[@"last_update_date"] && [dict[@"last_update_date"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
338+ if (dict[@"last_update_date"] && [dict[@"last_update_date"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
339+ if (dict[@"last_update_date"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"last_update_date"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"last_update_date"] substringToIndex:10]]) return nil;
338340 if (![dict[@"last_update_date"] isKindOfClass:NSString.class]) return nil;
339341 if (![dict[@"legal"] isKindOfClass:NSString.class]) return nil;
340342 if (![dict[@"legal_status"] isKindOfClass:NSString.class]) return nil;
@@ -353,14 +355,16 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
353355 if (!dict[@"networking"]) return nil;
354356 if (!dict[@"number_of_natural_persons"]) return nil;
355357 if (!dict[@"other_code_of_conduct"]) return nil;
356- if (dict[@"registration_date"] && [dict[@"registration_date"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
358+ if (dict[@"registration_date"] && [dict[@"registration_date"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
359+ if (dict[@"registration_date"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"registration_date"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"registration_date"] substringToIndex:10]]) return nil;
357360 if (![dict[@"registration_date"] isKindOfClass:NSString.class]) return nil;
358361 if (![dict[@"status"] isKindOfClass:NSString.class]) return nil;
359362 if (![dict[@"structure_members"] isKindOfClass:NSString.class]) return nil;
360363 if (![dict[@"sub_category"] isKindOfClass:NSNumber.class]) return nil;
361364 if ([dict[@"sub_category"] doubleValue] != [dict[@"sub_category"] longLongValue]) return nil;
362365 if (![dict[@"sub_category_title"] isKindOfClass:NSString.class]) return nil;
363- if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
366+ if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
367+ if (dict[@"updated_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"updated_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"updated_at"] substringToIndex:10]]) return nil;
364368 if (![dict[@"updated_at"] isKindOfClass:NSString.class]) return nil;
365369 if (![dict[@"uri"] isKindOfClass:NSString.class]) return nil;
366370 if (!dict[@"web_site_url"]) return nil;
Mphpdefault / TopLevel.php+16 −0
@@ -1685,6 +1685,10 @@ class Result {
16851685 */
16861686 public static function fromCreatedAt(string $value): DateTime {
16871687 $tmp = new DateTime($value);
1688+ $errors = DateTime::getLastErrors();
1689+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
1690+ throw new Exception('Invalid date-time');
1691+ }
16881692 if (!is_a($tmp, 'DateTime')) {
16891693 throw new Exception('Attribute Error:Result::');
16901694 }
@@ -2437,6 +2441,10 @@ class Result {
24372441 */
24382442 public static function fromLastUpdateDate(string $value): DateTime {
24392443 $tmp = new DateTime($value);
2444+ $errors = DateTime::getLastErrors();
2445+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
2446+ throw new Exception('Invalid date-time');
2447+ }
24402448 if (!is_a($tmp, 'DateTime')) {
24412449 throw new Exception('Attribute Error:Result::');
24422450 }
@@ -3269,6 +3277,10 @@ class Result {
32693277 */
32703278 public static function fromRegistrationDate(string $value): DateTime {
32713279 $tmp = new DateTime($value);
3280+ $errors = DateTime::getLastErrors();
3281+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
3282+ throw new Exception('Invalid date-time');
3283+ }
32723284 if (!is_a($tmp, 'DateTime')) {
32733285 throw new Exception('Attribute Error:Result::');
32743286 }
@@ -3512,6 +3524,10 @@ class Result {
35123524 */
35133525 public static function fromUpdatedAt(string $value): DateTime {
35143526 $tmp = new DateTime($value);
3527+ $errors = DateTime::getLastErrors();
3528+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
3529+ throw new Exception('Invalid date-time');
3530+ }
35153531 if (!is_a($tmp, 'DateTime')) {
35163532 throw new Exception('Attribute Error:Result::');
35173533 }
Mswiftdefault / quicktype.swift+1 −1
@@ -399,7 +399,7 @@ func newJSONDecoder() -> JSONDecoder {
399399 let decoder = JSONDecoder()
400400 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
401401 let container = try decoder.singleValueContainer()
402- let dateStr = try container.decode(String.self)
402+ let dateStr = try container.decode(String.self).uppercased()
403403
404404 let formatter = DateFormatter()
405405 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/75912.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -63,7 +63,7 @@ func newJSONDecoder() -> JSONDecoder {
6363 let decoder = JSONDecoder()
6464 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6565 let container = try decoder.singleValueContainer()
66- let dateStr = try container.decode(String.self)
66+ let dateStr = try container.decode(String.self).uppercased()
6767
6868 let formatter = DateFormatter()
6969 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/7681c.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -732,7 +732,7 @@ func newJSONDecoder() -> JSONDecoder {
732732 let decoder = JSONDecoder()
733733 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
734734 let container = try decoder.singleValueContainer()
735- let dateStr = try container.decode(String.self)
735+ let dateStr = try container.decode(String.self).uppercased()
736736
737737 let formatter = DateFormatter()
738738 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/76ae1.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -1439,7 +1439,7 @@ func newJSONDecoder() -> JSONDecoder {
14391439 let decoder = JSONDecoder()
14401440 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
14411441 let container = try decoder.singleValueContainer()
1442- let dateStr = try container.decode(String.self)
1442+ let dateStr = try container.decode(String.self).uppercased()
14431443
14441444 let formatter = DateFormatter()
14451445 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/77392.json

4 generated files · +8 −3
Mcplusplusdefault / quicktype.hpp+1 −1
@@ -167,7 +167,7 @@ namespace quicktype {
167167 inline void from_json(const json & j, TopLevelElement& x) {
168168 if (!j.is_object()) throw std::runtime_error("Expected object");
169169 x.set_designation(j.at("designation").get<std::string>());
170- if (j.find("discovery_date") != j.end() && !std::regex_match(j.at("discovery_date").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
170+ if (j.find("discovery_date") != j.end() && !std::regex_match(j.at("discovery_date").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
171171 x.set_discovery_date(j.at("discovery_date").get<std::string>());
172172 if (j.find("h_mag") != j.end() && j.at("h_mag").is_null()) throw std::runtime_error("Unexpected null");
173173 x.set_h_mag(get_stack_optional<std::string>(j, "h_mag"));
Mobjective-cdefault / QTTopLevel.m+2 −1
@@ -159,7 +159,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
159159 {
160160 if (self = [super init]) {
161161 if (![dict[@"designation"] isKindOfClass:NSString.class]) return nil;
162- if (dict[@"discovery_date"] && [dict[@"discovery_date"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
162+ if (dict[@"discovery_date"] && [dict[@"discovery_date"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
163+ if (dict[@"discovery_date"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"discovery_date"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"discovery_date"] substringToIndex:10]]) return nil;
163164 if (![dict[@"discovery_date"] isKindOfClass:NSString.class]) return nil;
164165 if (![dict[@"i_deg"] isKindOfClass:NSString.class]) return nil;
165166 if (![dict[@"moid_au"] isKindOfClass:NSString.class]) return nil;
Mphpdefault / TopLevel.php+4 −0
@@ -94,6 +94,10 @@ class TopLevel {
9494 */
9595 public static function fromDiscoveryDate(string $value): DateTime {
9696 $tmp = new DateTime($value);
97+ $errors = DateTime::getLastErrors();
98+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
99+ throw new Exception('Invalid date-time');
100+ }
97101 if (!is_a($tmp, 'DateTime')) {
98102 throw new Exception('Attribute Error:TopLevel::');
99103 }
Mswiftdefault / quicktype.swift+1 −1
@@ -136,7 +136,7 @@ func newJSONDecoder() -> JSONDecoder {
136136 let decoder = JSONDecoder()
137137 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
138138 let container = try decoder.singleValueContainer()
139- let dateStr = try container.decode(String.self)
139+ let dateStr = try container.decode(String.self).uppercased()
140140
141141 let formatter = DateFormatter()
142142 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/7d397.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -675,7 +675,7 @@ func newJSONDecoder() -> JSONDecoder {
675675 let decoder = JSONDecoder()
676676 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
677677 let container = try decoder.singleValueContainer()
678- let dateStr = try container.decode(String.self)
678+ let dateStr = try container.decode(String.self).uppercased()
679679
680680 let formatter = DateFormatter()
681681 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/7d722.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -271,7 +271,7 @@ func newJSONDecoder() -> JSONDecoder {
271271 let decoder = JSONDecoder()
272272 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
273273 let container = try decoder.singleValueContainer()
274- let dateStr = try container.decode(String.self)
274+ let dateStr = try container.decode(String.self).uppercased()
275275
276276 let formatter = DateFormatter()
277277 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/7df41.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -123,7 +123,7 @@ func newJSONDecoder() -> JSONDecoder {
123123 let decoder = JSONDecoder()
124124 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
125125 let container = try decoder.singleValueContainer()
126- let dateStr = try container.decode(String.self)
126+ let dateStr = try container.decode(String.self).uppercased()
127127
128128 let formatter = DateFormatter()
129129 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/7dfa6.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -103,7 +103,7 @@ func newJSONDecoder() -> JSONDecoder {
103103 let decoder = JSONDecoder()
104104 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105105 let container = try decoder.singleValueContainer()
106- let dateStr = try container.decode(String.self)
106+ let dateStr = try container.decode(String.self).uppercased()
107107
108108 let formatter = DateFormatter()
109109 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/7eb30.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -241,7 +241,7 @@ func newJSONDecoder() -> JSONDecoder {
241241 let decoder = JSONDecoder()
242242 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
243243 let container = try decoder.singleValueContainer()
244- let dateStr = try container.decode(String.self)
244+ let dateStr = try container.decode(String.self).uppercased()
245245
246246 let formatter = DateFormatter()
247247 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/7f568.json

4 generated files · +15 −5
Mcplusplusdefault / quicktype.hpp+2 −2
@@ -254,7 +254,7 @@ namespace quicktype {
254254 x.set_comments(j.at("comments").get<int64_t>());
255255 x.set_comments_url(j.at("comments_url").get<std::string>());
256256 x.set_commits_url(j.at("commits_url").get<std::string>());
257- if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
257+ if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
258258 x.set_created_at(j.at("created_at").get<std::string>());
259259 j.at("description");
260260 x.set_description(get_stack_optional<std::string>(j, "description"));
@@ -266,7 +266,7 @@ namespace quicktype {
266266 x.set_id(j.at("id").get<std::string>());
267267 x.set_top_level_public(j.at("public").get<bool>());
268268 x.set_truncated(j.at("truncated").get<bool>());
269- if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
269+ if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
270270 x.set_updated_at(j.at("updated_at").get<std::string>());
271271 x.set_url(j.at("url").get<std::string>());
272272 x.set_user(get_untyped(j, "user"));
Mobjective-cdefault / QTTopLevel.m+4 −2
@@ -153,7 +153,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
153153 if ([dict[@"comments"] doubleValue] != [dict[@"comments"] longLongValue]) return nil;
154154 if (![dict[@"comments_url"] isKindOfClass:NSString.class]) return nil;
155155 if (![dict[@"commits_url"] isKindOfClass:NSString.class]) return nil;
156- if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
156+ if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
157+ if (dict[@"created_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created_at"] substringToIndex:10]]) return nil;
157158 if (![dict[@"created_at"] isKindOfClass:NSString.class]) return nil;
158159 if (![dict[@"files"] isKindOfClass:NSDictionary.class]) return nil;
159160 if (![dict[@"forks_url"] isKindOfClass:NSString.class]) return nil;
@@ -164,7 +165,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
164165 if (![dict[@"public"] isKindOfClass:NSNumber.class]) return nil;
165166 if (![dict[@"truncated"] isKindOfClass:NSNumber.class]) return nil;
166167 if (!dict[@"description"]) return nil;
167- if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
168+ if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
169+ if (dict[@"updated_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"updated_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"updated_at"] substringToIndex:10]]) return nil;
168170 if (![dict[@"updated_at"] isKindOfClass:NSString.class]) return nil;
169171 if (![dict[@"url"] isKindOfClass:NSString.class]) return nil;
170172 if (!dict[@"user"]) return nil;
Mphpdefault / TopLevel.php+8 −0
@@ -206,6 +206,10 @@ class TopLevel {
206206 */
207207 public static function fromCreatedAt(string $value): DateTime {
208208 $tmp = new DateTime($value);
209+ $errors = DateTime::getLastErrors();
210+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
211+ throw new Exception('Invalid date-time');
212+ }
209213 if (!is_a($tmp, 'DateTime')) {
210214 throw new Exception('Attribute Error:TopLevel::');
211215 }
@@ -708,6 +712,10 @@ class TopLevel {
708712 */
709713 public static function fromUpdatedAt(string $value): DateTime {
710714 $tmp = new DateTime($value);
715+ $errors = DateTime::getLastErrors();
716+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
717+ throw new Exception('Invalid date-time');
718+ }
711719 if (!is_a($tmp, 'DateTime')) {
712720 throw new Exception('Attribute Error:TopLevel::');
713721 }
Mswiftdefault / quicktype.swift+1 −1
@@ -210,7 +210,7 @@ func newJSONDecoder() -> JSONDecoder {
210210 let decoder = JSONDecoder()
211211 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
212212 let container = try decoder.singleValueContainer()
213- let dateStr = try container.decode(String.self)
213+ let dateStr = try container.decode(String.self).uppercased()
214214
215215 let formatter = DateFormatter()
216216 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/7fbfb.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -240,7 +240,7 @@ func newJSONDecoder() -> JSONDecoder {
240240 let decoder = JSONDecoder()
241241 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
242242 let container = try decoder.singleValueContainer()
243- let dateStr = try container.decode(String.self)
243+ let dateStr = try container.decode(String.self).uppercased()
244244
245245 let formatter = DateFormatter()
246246 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/80aff.json

4 generated files · +15 −5
Mcplusplusdefault / quicktype.hpp+2 −2
@@ -208,7 +208,7 @@ namespace quicktype {
208208
209209 inline void from_json(const json & j, Result& x) {
210210 if (!j.is_object()) throw std::runtime_error("Expected object");
211- if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
211+ if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
212212 x.set_created_at(j.at("created_at").get<std::string>());
213213 if (j.find("id") != j.end() && !j.at("id").is_number_integer()) throw std::runtime_error("Expected integer");
214214 x.set_id(j.at("id").get<int64_t>());
@@ -217,7 +217,7 @@ namespace quicktype {
217217 x.set_name(j.at("name").get<std::string>());
218218 j.at("parent");
219219 x.set_parent(get_stack_optional<int64_t>(j, "parent"));
220- if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
220+ if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
221221 x.set_updated_at(j.at("updated_at").get<std::string>());
222222 x.set_uri(j.at("uri").get<std::string>());
223223 }
Mobjective-cdefault / QTTopLevel.m+4 −2
@@ -229,7 +229,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
229229 - (instancetype)initWithJSONDictionary:(NSDictionary *)dict
230230 {
231231 if (self = [super init]) {
232- if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
232+ if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
233+ if (dict[@"created_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created_at"] substringToIndex:10]]) return nil;
233234 if (![dict[@"created_at"] isKindOfClass:NSString.class]) return nil;
234235 if (![dict[@"id"] isKindOfClass:NSNumber.class]) return nil;
235236 if ([dict[@"id"] doubleValue] != [dict[@"id"] longLongValue]) return nil;
@@ -237,7 +238,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
237238 if ([dict[@"items"] doubleValue] != [dict[@"items"] longLongValue]) return nil;
238239 if (![dict[@"name"] isKindOfClass:NSString.class]) return nil;
239240 if (!dict[@"parent"]) return nil;
240- if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
241+ if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
242+ if (dict[@"updated_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"updated_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"updated_at"] substringToIndex:10]]) return nil;
241243 if (![dict[@"updated_at"] isKindOfClass:NSString.class]) return nil;
242244 if (![dict[@"uri"] isKindOfClass:NSString.class]) return nil;
243245 [self setValuesForKeysWithDictionary:dict];
Mphpdefault / TopLevel.php+8 −0
@@ -539,6 +539,10 @@ class Result {
539539 */
540540 public static function fromCreatedAt(string $value): DateTime {
541541 $tmp = new DateTime($value);
542+ $errors = DateTime::getLastErrors();
543+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
544+ throw new Exception('Invalid date-time');
545+ }
542546 if (!is_a($tmp, 'DateTime')) {
543547 throw new Exception('Attribute Error:Result::');
544548 }
@@ -791,6 +795,10 @@ class Result {
791795 */
792796 public static function fromUpdatedAt(string $value): DateTime {
793797 $tmp = new DateTime($value);
798+ $errors = DateTime::getLastErrors();
799+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
800+ throw new Exception('Invalid date-time');
801+ }
794802 if (!is_a($tmp, 'DateTime')) {
795803 throw new Exception('Attribute Error:Result::');
796804 }
Mswiftdefault / quicktype.swift+1 −1
@@ -190,7 +190,7 @@ func newJSONDecoder() -> JSONDecoder {
190190 let decoder = JSONDecoder()
191191 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
192192 let container = try decoder.singleValueContainer()
193- let dateStr = try container.decode(String.self)
193+ let dateStr = try container.decode(String.self).uppercased()
194194
195195 let formatter = DateFormatter()
196196 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/82509.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -55,7 +55,7 @@ func newJSONDecoder() -> JSONDecoder {
5555 let decoder = JSONDecoder()
5656 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5757 let container = try decoder.singleValueContainer()
58- let dateStr = try container.decode(String.self)
58+ let dateStr = try container.decode(String.self).uppercased()
5959
6060 let formatter = DateFormatter()
6161 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/8592b.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -687,7 +687,7 @@ func newJSONDecoder() -> JSONDecoder {
687687 let decoder = JSONDecoder()
688688 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
689689 let container = try decoder.singleValueContainer()
690- let dateStr = try container.decode(String.self)
690+ let dateStr = try container.decode(String.self).uppercased()
691691
692692 let formatter = DateFormatter()
693693 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/88130.json

4 generated files · +8 −3
Mcplusplusdefault / quicktype.hpp+1 −1
@@ -711,7 +711,7 @@ namespace quicktype {
711711 if (!j.is_object()) throw std::runtime_error("Expected object");
712712 if (j.find("count") != j.end() && !j.at("count").is_number_integer()) throw std::runtime_error("Expected integer");
713713 x.set_count(j.at("count").get<int64_t>());
714- if (j.find("created") != j.end() && !std::regex_match(j.at("created").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
714+ if (j.find("created") != j.end() && !std::regex_match(j.at("created").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
715715 x.set_created(j.at("created").get<std::string>());
716716 x.set_lang(j.at("lang").get<std::string>());
717717 x.set_results(j.at("results").get<Results>());
Mobjective-cdefault / QTTopLevel.m+2 −1
@@ -217,7 +217,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
217217 if (self = [super init]) {
218218 if (![dict[@"count"] isKindOfClass:NSNumber.class]) return nil;
219219 if ([dict[@"count"] doubleValue] != [dict[@"count"] longLongValue]) return nil;
220- if (dict[@"created"] && [dict[@"created"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
220+ if (dict[@"created"] && [dict[@"created"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
221+ if (dict[@"created"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created"] substringToIndex:10]]) return nil;
221222 if (![dict[@"created"] isKindOfClass:NSString.class]) return nil;
222223 if (![dict[@"lang"] isKindOfClass:NSString.class]) return nil;
223224 if (![dict[@"results"] isKindOfClass:NSDictionary.class]) return nil;
Mphpdefault / TopLevel.php+4 −0
@@ -178,6 +178,10 @@ class Query {
178178 */
179179 public static function fromCreated(string $value): DateTime {
180180 $tmp = new DateTime($value);
181+ $errors = DateTime::getLastErrors();
182+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
183+ throw new Exception('Invalid date-time');
184+ }
181185 if (!is_a($tmp, 'DateTime')) {
182186 throw new Exception('Attribute Error:Query::');
183187 }
Mswiftdefault / quicktype.swift+1 −1
@@ -811,7 +811,7 @@ func newJSONDecoder() -> JSONDecoder {
811811 let decoder = JSONDecoder()
812812 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
813813 let container = try decoder.singleValueContainer()
814- let dateStr = try container.decode(String.self)
814+ let dateStr = try container.decode(String.self).uppercased()
815815
816816 let formatter = DateFormatter()
817817 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/8a62c.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -103,7 +103,7 @@ func newJSONDecoder() -> JSONDecoder {
103103 let decoder = JSONDecoder()
104104 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105105 let container = try decoder.singleValueContainer()
106- let dateStr = try container.decode(String.self)
106+ let dateStr = try container.decode(String.self).uppercased()
107107
108108 let formatter = DateFormatter()
109109 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/908db.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -147,7 +147,7 @@ func newJSONDecoder() -> JSONDecoder {
147147 let decoder = JSONDecoder()
148148 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
149149 let container = try decoder.singleValueContainer()
150- let dateStr = try container.decode(String.self)
150+ let dateStr = try container.decode(String.self).uppercased()
151151
152152 let formatter = DateFormatter()
153153 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/9617f.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -63,7 +63,7 @@ func newJSONDecoder() -> JSONDecoder {
6363 let decoder = JSONDecoder()
6464 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6565 let container = try decoder.singleValueContainer()
66- let dateStr = try container.decode(String.self)
66+ let dateStr = try container.decode(String.self).uppercased()
6767
6868 let formatter = DateFormatter()
6969 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/96f7c.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -75,7 +75,7 @@ func newJSONDecoder() -> JSONDecoder {
7575 let decoder = JSONDecoder()
7676 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
7777 let container = try decoder.singleValueContainer()
78- let dateStr = try container.decode(String.self)
78+ let dateStr = try container.decode(String.self).uppercased()
7979
8080 let formatter = DateFormatter()
8181 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/9847b.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -86,7 +86,7 @@ func newJSONDecoder() -> JSONDecoder {
8686 let decoder = JSONDecoder()
8787 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8888 let container = try decoder.singleValueContainer()
89- let dateStr = try container.decode(String.self)
89+ let dateStr = try container.decode(String.self).uppercased()
9090
9191 let formatter = DateFormatter()
9292 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/9929c.json

4 generated files · +8 −3
Mcplusplusdefault / quicktype.hpp+1 −1
@@ -711,7 +711,7 @@ namespace quicktype {
711711 if (!j.is_object()) throw std::runtime_error("Expected object");
712712 if (j.find("count") != j.end() && !j.at("count").is_number_integer()) throw std::runtime_error("Expected integer");
713713 x.set_count(j.at("count").get<int64_t>());
714- if (j.find("created") != j.end() && !std::regex_match(j.at("created").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
714+ if (j.find("created") != j.end() && !std::regex_match(j.at("created").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
715715 x.set_created(j.at("created").get<std::string>());
716716 x.set_lang(j.at("lang").get<std::string>());
717717 x.set_results(j.at("results").get<Results>());
Mobjective-cdefault / QTTopLevel.m+2 −1
@@ -217,7 +217,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
217217 if (self = [super init]) {
218218 if (![dict[@"count"] isKindOfClass:NSNumber.class]) return nil;
219219 if ([dict[@"count"] doubleValue] != [dict[@"count"] longLongValue]) return nil;
220- if (dict[@"created"] && [dict[@"created"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
220+ if (dict[@"created"] && [dict[@"created"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
221+ if (dict[@"created"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created"] substringToIndex:10]]) return nil;
221222 if (![dict[@"created"] isKindOfClass:NSString.class]) return nil;
222223 if (![dict[@"lang"] isKindOfClass:NSString.class]) return nil;
223224 if (![dict[@"results"] isKindOfClass:NSDictionary.class]) return nil;
Mphpdefault / TopLevel.php+4 −0
@@ -178,6 +178,10 @@ class Query {
178178 */
179179 public static function fromCreated(string $value): DateTime {
180180 $tmp = new DateTime($value);
181+ $errors = DateTime::getLastErrors();
182+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
183+ throw new Exception('Invalid date-time');
184+ }
181185 if (!is_a($tmp, 'DateTime')) {
182186 throw new Exception('Attribute Error:Query::');
183187 }
Mswiftdefault / quicktype.swift+1 −1
@@ -811,7 +811,7 @@ func newJSONDecoder() -> JSONDecoder {
811811 let decoder = JSONDecoder()
812812 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
813813 let container = try decoder.singleValueContainer()
814- let dateStr = try container.decode(String.self)
814+ let dateStr = try container.decode(String.self).uppercased()
815815
816816 let formatter = DateFormatter()
817817 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/996bd.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -281,7 +281,7 @@ func newJSONDecoder() -> JSONDecoder {
281281 let decoder = JSONDecoder()
282282 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
283283 let container = try decoder.singleValueContainer()
284- let dateStr = try container.decode(String.self)
284+ let dateStr = try container.decode(String.self).uppercased()
285285
286286 let formatter = DateFormatter()
287287 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/9a503.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -264,7 +264,7 @@ func newJSONDecoder() -> JSONDecoder {
264264 let decoder = JSONDecoder()
265265 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
266266 let container = try decoder.singleValueContainer()
267- let dateStr = try container.decode(String.self)
267+ let dateStr = try container.decode(String.self).uppercased()
268268
269269 let formatter = DateFormatter()
270270 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/9ac3b.json

4 generated files · +15 −5
Mcplusplusdefault / quicktype.hpp+2 −2
@@ -237,7 +237,7 @@ namespace quicktype {
237237
238238 inline void from_json(const json & j, Result& x) {
239239 if (!j.is_object()) throw std::runtime_error("Expected object");
240- if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
240+ if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
241241 x.set_created_at(j.at("created_at").get<std::string>());
242242 x.set_entity(j.at("entity").get<std::string>());
243243 x.set_first_name(j.at("first_name").get<std::string>());
@@ -249,7 +249,7 @@ namespace quicktype {
249249 x.set_status(j.at("status").get<Status>());
250250 j.at("title");
251251 x.set_title(get_stack_optional<Title>(j, "title"));
252- if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
252+ if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
253253 x.set_updated_at(j.at("updated_at").get<std::string>());
254254 x.set_uri(j.at("uri").get<std::string>());
255255 }
Mobjective-cdefault / QTTopLevel.m+4 −2
@@ -286,7 +286,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
286286 - (instancetype)initWithJSONDictionary:(NSDictionary *)dict
287287 {
288288 if (self = [super init]) {
289- if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
289+ if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
290+ if (dict[@"created_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created_at"] substringToIndex:10]]) return nil;
290291 if (![dict[@"created_at"] isKindOfClass:NSString.class]) return nil;
291292 if (![dict[@"entity"] isKindOfClass:NSString.class]) return nil;
292293 if (![dict[@"first_name"] isKindOfClass:NSString.class]) return nil;
@@ -296,7 +297,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
296297 if (!dict[@"position"]) return nil;
297298 if (![dict[@"status"] isKindOfClass:NSString.class]) return nil;
298299 if (!dict[@"title"]) return nil;
299- if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
300+ if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
301+ if (dict[@"updated_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"updated_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"updated_at"] substringToIndex:10]]) return nil;
300302 if (![dict[@"updated_at"] isKindOfClass:NSString.class]) return nil;
301303 if (![dict[@"uri"] isKindOfClass:NSString.class]) return nil;
302304 [self setValuesForKeysWithDictionary:dict];
Mphpdefault / TopLevel.php+8 −0
@@ -551,6 +551,10 @@ class Result {
551551 */
552552 public static function fromCreatedAt(string $value): DateTime {
553553 $tmp = new DateTime($value);
554+ $errors = DateTime::getLastErrors();
555+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
556+ throw new Exception('Invalid date-time');
557+ }
554558 if (!is_a($tmp, 'DateTime')) {
555559 throw new Exception('Attribute Error:Result::');
556560 }
@@ -1003,6 +1007,10 @@ class Result {
10031007 */
10041008 public static function fromUpdatedAt(string $value): DateTime {
10051009 $tmp = new DateTime($value);
1010+ $errors = DateTime::getLastErrors();
1011+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
1012+ throw new Exception('Invalid date-time');
1013+ }
10061014 if (!is_a($tmp, 'DateTime')) {
10071015 throw new Exception('Attribute Error:Result::');
10081016 }
Mswiftdefault / quicktype.swift+1 −1
@@ -216,7 +216,7 @@ func newJSONDecoder() -> JSONDecoder {
216216 let decoder = JSONDecoder()
217217 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
218218 let container = try decoder.singleValueContainer()
219- let dateStr = try container.decode(String.self)
219+ let dateStr = try container.decode(String.self).uppercased()
220220
221221 let formatter = DateFormatter()
222222 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/9eed5.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -263,7 +263,7 @@ func newJSONDecoder() -> JSONDecoder {
263263 let decoder = JSONDecoder()
264264 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
265265 let container = try decoder.singleValueContainer()
266- let dateStr = try container.decode(String.self)
266+ let dateStr = try container.decode(String.self).uppercased()
267267
268268 let formatter = DateFormatter()
269269 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/a0496.json

4 generated files · +8 −3
Mcplusplusdefault / quicktype.hpp+1 −1
@@ -239,7 +239,7 @@ namespace quicktype {
239239 x.set_source_name(j.at("source_name").get<std::string>());
240240 x.set_to_date(j.at("to_date").get<std::string>());
241241 x.set_type(j.at("type").get<std::string>());
242- if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
242+ if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
243243 x.set_updated_at(j.at("updated_at").get<std::string>());
244244 x.set_urlize_name(j.at("urlize_name").get<std::string>());
245245 }
Mobjective-cdefault / QTTopLevel.m+2 −1
@@ -125,7 +125,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
125125 if (![dict[@"description"] isKindOfClass:NSString.class]) return nil;
126126 if (![dict[@"to_date"] isKindOfClass:NSString.class]) return nil;
127127 if (![dict[@"type"] isKindOfClass:NSString.class]) return nil;
128- if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
128+ if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
129+ if (dict[@"updated_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"updated_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"updated_at"] substringToIndex:10]]) return nil;
129130 if (![dict[@"updated_at"] isKindOfClass:NSString.class]) return nil;
130131 if (![dict[@"urlize_name"] isKindOfClass:NSString.class]) return nil;
131132 [self setValuesForKeysWithDictionary:dict];
Mphpdefault / TopLevel.php+4 −0
@@ -841,6 +841,10 @@ class TopLevel {
841841 */
842842 public static function fromUpdatedAt(string $value): DateTime {
843843 $tmp = new DateTime($value);
844+ $errors = DateTime::getLastErrors();
845+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
846+ throw new Exception('Invalid date-time');
847+ }
844848 if (!is_a($tmp, 'DateTime')) {
845849 throw new Exception('Attribute Error:TopLevel::');
846850 }
Mswiftdefault / quicktype.swift+1 −1
@@ -197,7 +197,7 @@ func newJSONDecoder() -> JSONDecoder {
197197 let decoder = JSONDecoder()
198198 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
199199 let container = try decoder.singleValueContainer()
200- let dateStr = try container.decode(String.self)
200+ let dateStr = try container.decode(String.self).uppercased()
201201
202202 let formatter = DateFormatter()
203203 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/a1eca.json

4 generated files · +8 −3
Mcplusplusdefault / quicktype.hpp+1 −1
@@ -711,7 +711,7 @@ namespace quicktype {
711711 if (!j.is_object()) throw std::runtime_error("Expected object");
712712 if (j.find("count") != j.end() && !j.at("count").is_number_integer()) throw std::runtime_error("Expected integer");
713713 x.set_count(j.at("count").get<int64_t>());
714- if (j.find("created") != j.end() && !std::regex_match(j.at("created").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
714+ if (j.find("created") != j.end() && !std::regex_match(j.at("created").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
715715 x.set_created(j.at("created").get<std::string>());
716716 x.set_lang(j.at("lang").get<std::string>());
717717 x.set_results(j.at("results").get<Results>());
Mobjective-cdefault / QTTopLevel.m+2 −1
@@ -217,7 +217,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
217217 if (self = [super init]) {
218218 if (![dict[@"count"] isKindOfClass:NSNumber.class]) return nil;
219219 if ([dict[@"count"] doubleValue] != [dict[@"count"] longLongValue]) return nil;
220- if (dict[@"created"] && [dict[@"created"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
220+ if (dict[@"created"] && [dict[@"created"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
221+ if (dict[@"created"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created"] substringToIndex:10]]) return nil;
221222 if (![dict[@"created"] isKindOfClass:NSString.class]) return nil;
222223 if (![dict[@"lang"] isKindOfClass:NSString.class]) return nil;
223224 if (![dict[@"results"] isKindOfClass:NSDictionary.class]) return nil;
Mphpdefault / TopLevel.php+4 −0
@@ -178,6 +178,10 @@ class Query {
178178 */
179179 public static function fromCreated(string $value): DateTime {
180180 $tmp = new DateTime($value);
181+ $errors = DateTime::getLastErrors();
182+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
183+ throw new Exception('Invalid date-time');
184+ }
181185 if (!is_a($tmp, 'DateTime')) {
182186 throw new Exception('Attribute Error:Query::');
183187 }
Mswiftdefault / quicktype.swift+1 −1
@@ -811,7 +811,7 @@ func newJSONDecoder() -> JSONDecoder {
811811 let decoder = JSONDecoder()
812812 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
813813 let container = try decoder.singleValueContainer()
814- let dateStr = try container.decode(String.self)
814+ let dateStr = try container.decode(String.self).uppercased()
815815
816816 let formatter = DateFormatter()
817817 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/a3d8c.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -871,7 +871,7 @@ func newJSONDecoder() -> JSONDecoder {
871871 let decoder = JSONDecoder()
872872 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
873873 let container = try decoder.singleValueContainer()
874- let dateStr = try container.decode(String.self)
874+ let dateStr = try container.decode(String.self).uppercased()
875875
876876 let formatter = DateFormatter()
877877 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/a45b0.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -106,7 +106,7 @@ func newJSONDecoder() -> JSONDecoder {
106106 let decoder = JSONDecoder()
107107 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
108108 let container = try decoder.singleValueContainer()
109- let dateStr = try container.decode(String.self)
109+ let dateStr = try container.decode(String.self).uppercased()
110110
111111 let formatter = DateFormatter()
112112 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/a71df.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -271,7 +271,7 @@ func newJSONDecoder() -> JSONDecoder {
271271 let decoder = JSONDecoder()
272272 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
273273 let container = try decoder.singleValueContainer()
274- let dateStr = try container.decode(String.self)
274+ let dateStr = try container.decode(String.self).uppercased()
275275
276276 let formatter = DateFormatter()
277277 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/a9691.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -63,7 +63,7 @@ func newJSONDecoder() -> JSONDecoder {
6363 let decoder = JSONDecoder()
6464 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6565 let container = try decoder.singleValueContainer()
66- let dateStr = try container.decode(String.self)
66+ let dateStr = try container.decode(String.self).uppercased()
6767
6868 let formatter = DateFormatter()
6969 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/ab0d1.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -106,7 +106,7 @@ func newJSONDecoder() -> JSONDecoder {
106106 let decoder = JSONDecoder()
107107 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
108108 let container = try decoder.singleValueContainer()
109- let dateStr = try container.decode(String.self)
109+ let dateStr = try container.decode(String.self).uppercased()
110110
111111 let formatter = DateFormatter()
112112 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/abb4b.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -103,7 +103,7 @@ func newJSONDecoder() -> JSONDecoder {
103103 let decoder = JSONDecoder()
104104 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105105 let container = try decoder.singleValueContainer()
106- let dateStr = try container.decode(String.self)
106+ let dateStr = try container.decode(String.self).uppercased()
107107
108108 let formatter = DateFormatter()
109109 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/ac944.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -63,7 +63,7 @@ func newJSONDecoder() -> JSONDecoder {
6363 let decoder = JSONDecoder()
6464 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6565 let container = try decoder.singleValueContainer()
66- let dateStr = try container.decode(String.self)
66+ let dateStr = try container.decode(String.self).uppercased()
6767
6868 let formatter = DateFormatter()
6969 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/ad8be.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -348,7 +348,7 @@ func newJSONDecoder() -> JSONDecoder {
348348 let decoder = JSONDecoder()
349349 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
350350 let container = try decoder.singleValueContainer()
351- let dateStr = try container.decode(String.self)
351+ let dateStr = try container.decode(String.self).uppercased()
352352
353353 let formatter = DateFormatter()
354354 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/ae7f0.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -510,7 +510,7 @@ func newJSONDecoder() -> JSONDecoder {
510510 let decoder = JSONDecoder()
511511 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
512512 let container = try decoder.singleValueContainer()
513- let dateStr = try container.decode(String.self)
513+ let dateStr = try container.decode(String.self).uppercased()
514514
515515 let formatter = DateFormatter()
516516 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/ae9ca.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -268,7 +268,7 @@ func newJSONDecoder() -> JSONDecoder {
268268 let decoder = JSONDecoder()
269269 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
270270 let container = try decoder.singleValueContainer()
271- let dateStr = try container.decode(String.self)
271+ let dateStr = try container.decode(String.self).uppercased()
272272
273273 let formatter = DateFormatter()
274274 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/af2d1.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -511,7 +511,7 @@ func newJSONDecoder() -> JSONDecoder {
511511 let decoder = JSONDecoder()
512512 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
513513 let container = try decoder.singleValueContainer()
514- let dateStr = try container.decode(String.self)
514+ let dateStr = try container.decode(String.self).uppercased()
515515
516516 let formatter = DateFormatter()
517517 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/b4865.json

3 generated files · +6 −2
Mcplusplusdefault / quicktype.hpp+1 −1
@@ -232,7 +232,7 @@ namespace quicktype {
232232 x.set_reclat(get_stack_optional<std::string>(j, "reclat"));
233233 if (j.find("reclong") != j.end() && j.at("reclong").is_null()) throw std::runtime_error("Unexpected null");
234234 x.set_reclong(get_stack_optional<std::string>(j, "reclong"));
235- if (j.find("year") != j.end() && !std::regex_match(j.at("year").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
235+ if (j.find("year") != j.end() && !std::regex_match(j.at("year").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
236236 if (j.find("year") != j.end() && j.at("year").is_null()) throw std::runtime_error("Unexpected null");
237237 x.set_year(get_stack_optional<std::string>(j, "year"));
238238 }
Mphpdefault / TopLevel.php+4 −0
@@ -634,6 +634,10 @@ class TopLevel {
634634 public static function fromYear(?string $value): ?DateTime {
635635 if (!is_null($value)) {
636636 $tmp = new DateTime($value);
637+ $errors = DateTime::getLastErrors();
638+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
639+ throw new Exception('Invalid date-time');
640+ }
637641 if (!is_a($tmp, 'DateTime')) {
638642 throw new Exception('Attribute Error:TopLevel::');
639643 }
Mswiftdefault / quicktype.swift+1 −1
@@ -187,7 +187,7 @@ func newJSONDecoder() -> JSONDecoder {
187187 let decoder = JSONDecoder()
188188 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
189189 let container = try decoder.singleValueContainer()
190- let dateStr = try container.decode(String.self)
190+ let dateStr = try container.decode(String.self).uppercased()
191191
192192 let formatter = DateFormatter()
193193 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/b6f2c.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -103,7 +103,7 @@ func newJSONDecoder() -> JSONDecoder {
103103 let decoder = JSONDecoder()
104104 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105105 let container = try decoder.singleValueContainer()
106- let dateStr = try container.decode(String.self)
106+ let dateStr = try container.decode(String.self).uppercased()
107107
108108 let formatter = DateFormatter()
109109 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/b6fe5.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -67,7 +67,7 @@ func newJSONDecoder() -> JSONDecoder {
6767 let decoder = JSONDecoder()
6868 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6969 let container = try decoder.singleValueContainer()
70- let dateStr = try container.decode(String.self)
70+ let dateStr = try container.decode(String.self).uppercased()
7171
7272 let formatter = DateFormatter()
7373 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/b9f64.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -55,7 +55,7 @@ func newJSONDecoder() -> JSONDecoder {
5555 let decoder = JSONDecoder()
5656 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5757 let container = try decoder.singleValueContainer()
58- let dateStr = try container.decode(String.self)
58+ let dateStr = try container.decode(String.self).uppercased()
5959
6060 let formatter = DateFormatter()
6161 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/bb1ec.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -103,7 +103,7 @@ func newJSONDecoder() -> JSONDecoder {
103103 let decoder = JSONDecoder()
104104 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105105 let container = try decoder.singleValueContainer()
106- let dateStr = try container.decode(String.self)
106+ let dateStr = try container.decode(String.self).uppercased()
107107
108108 let formatter = DateFormatter()
109109 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/be234.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -937,7 +937,7 @@ func newJSONDecoder() -> JSONDecoder {
937937 let decoder = JSONDecoder()
938938 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
939939 let container = try decoder.singleValueContainer()
940- let dateStr = try container.decode(String.self)
940+ let dateStr = try container.decode(String.self).uppercased()
941941
942942 let formatter = DateFormatter()
943943 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/c0356.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -159,7 +159,7 @@ func newJSONDecoder() -> JSONDecoder {
159159 let decoder = JSONDecoder()
160160 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
161161 let container = try decoder.singleValueContainer()
162- let dateStr = try container.decode(String.self)
162+ let dateStr = try container.decode(String.self).uppercased()
163163
164164 let formatter = DateFormatter()
165165 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/c0a3a.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -271,7 +271,7 @@ func newJSONDecoder() -> JSONDecoder {
271271 let decoder = JSONDecoder()
272272 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
273273 let container = try decoder.singleValueContainer()
274- let dateStr = try container.decode(String.self)
274+ let dateStr = try container.decode(String.self).uppercased()
275275
276276 let formatter = DateFormatter()
277277 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/c3303.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -726,7 +726,7 @@ func newJSONDecoder() -> JSONDecoder {
726726 let decoder = JSONDecoder()
727727 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
728728 let container = try decoder.singleValueContainer()
729- let dateStr = try container.decode(String.self)
729+ let dateStr = try container.decode(String.self).uppercased()
730730
731731 let formatter = DateFormatter()
732732 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/c6cfd.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -103,7 +103,7 @@ func newJSONDecoder() -> JSONDecoder {
103103 let decoder = JSONDecoder()
104104 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105105 let container = try decoder.singleValueContainer()
106- let dateStr = try container.decode(String.self)
106+ let dateStr = try container.decode(String.self).uppercased()
107107
108108 let formatter = DateFormatter()
109109 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/c8c7e.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -240,7 +240,7 @@ func newJSONDecoder() -> JSONDecoder {
240240 let decoder = JSONDecoder()
241241 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
242242 let container = try decoder.singleValueContainer()
243- let dateStr = try container.decode(String.self)
243+ let dateStr = try container.decode(String.self).uppercased()
244244
245245 let formatter = DateFormatter()
246246 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/cb0cc.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -180,7 +180,7 @@ func newJSONDecoder() -> JSONDecoder {
180180 let decoder = JSONDecoder()
181181 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
182182 let container = try decoder.singleValueContainer()
183- let dateStr = try container.decode(String.self)
183+ let dateStr = try container.decode(String.self).uppercased()
184184
185185 let formatter = DateFormatter()
186186 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/cb81e.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -115,7 +115,7 @@ func newJSONDecoder() -> JSONDecoder {
115115 let decoder = JSONDecoder()
116116 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
117117 let container = try decoder.singleValueContainer()
118- let dateStr = try container.decode(String.self)
118+ let dateStr = try container.decode(String.self).uppercased()
119119
120120 let formatter = DateFormatter()
121121 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/ccd18.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -271,7 +271,7 @@ func newJSONDecoder() -> JSONDecoder {
271271 let decoder = JSONDecoder()
272272 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
273273 let container = try decoder.singleValueContainer()
274- let dateStr = try container.decode(String.self)
274+ let dateStr = try container.decode(String.self).uppercased()
275275
276276 let formatter = DateFormatter()
277277 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/cd238.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -271,7 +271,7 @@ func newJSONDecoder() -> JSONDecoder {
271271 let decoder = JSONDecoder()
272272 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
273273 let container = try decoder.singleValueContainer()
274- let dateStr = try container.decode(String.self)
274+ let dateStr = try container.decode(String.self).uppercased()
275275
276276 let formatter = DateFormatter()
277277 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/cd463.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -63,7 +63,7 @@ func newJSONDecoder() -> JSONDecoder {
6363 let decoder = JSONDecoder()
6464 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6565 let container = try decoder.singleValueContainer()
66- let dateStr = try container.decode(String.self)
66+ let dateStr = try container.decode(String.self).uppercased()
6767
6868 let formatter = DateFormatter()
6969 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/cda6c.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -240,7 +240,7 @@ func newJSONDecoder() -> JSONDecoder {
240240 let decoder = JSONDecoder()
241241 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
242242 let container = try decoder.singleValueContainer()
243- let dateStr = try container.decode(String.self)
243+ let dateStr = try container.decode(String.self).uppercased()
244244
245245 let formatter = DateFormatter()
246246 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/cf0d8.json

4 generated files · +8 −3
Mcplusplusdefault / quicktype.hpp+1 −1
@@ -711,7 +711,7 @@ namespace quicktype {
711711 if (!j.is_object()) throw std::runtime_error("Expected object");
712712 if (j.find("count") != j.end() && !j.at("count").is_number_integer()) throw std::runtime_error("Expected integer");
713713 x.set_count(j.at("count").get<int64_t>());
714- if (j.find("created") != j.end() && !std::regex_match(j.at("created").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
714+ if (j.find("created") != j.end() && !std::regex_match(j.at("created").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
715715 x.set_created(j.at("created").get<std::string>());
716716 x.set_lang(j.at("lang").get<std::string>());
717717 x.set_results(j.at("results").get<Results>());
Mobjective-cdefault / QTTopLevel.m+2 −1
@@ -217,7 +217,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
217217 if (self = [super init]) {
218218 if (![dict[@"count"] isKindOfClass:NSNumber.class]) return nil;
219219 if ([dict[@"count"] doubleValue] != [dict[@"count"] longLongValue]) return nil;
220- if (dict[@"created"] && [dict[@"created"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
220+ if (dict[@"created"] && [dict[@"created"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
221+ if (dict[@"created"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created"] substringToIndex:10]]) return nil;
221222 if (![dict[@"created"] isKindOfClass:NSString.class]) return nil;
222223 if (![dict[@"lang"] isKindOfClass:NSString.class]) return nil;
223224 if (![dict[@"results"] isKindOfClass:NSDictionary.class]) return nil;
Mphpdefault / TopLevel.php+4 −0
@@ -178,6 +178,10 @@ class Query {
178178 */
179179 public static function fromCreated(string $value): DateTime {
180180 $tmp = new DateTime($value);
181+ $errors = DateTime::getLastErrors();
182+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
183+ throw new Exception('Invalid date-time');
184+ }
181185 if (!is_a($tmp, 'DateTime')) {
182186 throw new Exception('Attribute Error:Query::');
183187 }
Mswiftdefault / quicktype.swift+1 −1
@@ -811,7 +811,7 @@ func newJSONDecoder() -> JSONDecoder {
811811 let decoder = JSONDecoder()
812812 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
813813 let container = try decoder.singleValueContainer()
814- let dateStr = try container.decode(String.self)
814+ let dateStr = try container.decode(String.self).uppercased()
815815
816816 let formatter = DateFormatter()
817817 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/cfbce.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -63,7 +63,7 @@ func newJSONDecoder() -> JSONDecoder {
6363 let decoder = JSONDecoder()
6464 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6565 let container = try decoder.singleValueContainer()
66- let dateStr = try container.decode(String.self)
66+ let dateStr = try container.decode(String.self).uppercased()
6767
6868 let formatter = DateFormatter()
6969 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/d0908.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -103,7 +103,7 @@ func newJSONDecoder() -> JSONDecoder {
103103 let decoder = JSONDecoder()
104104 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105105 let container = try decoder.singleValueContainer()
106- let dateStr = try container.decode(String.self)
106+ let dateStr = try container.decode(String.self).uppercased()
107107
108108 let formatter = DateFormatter()
109109 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/d23d5.json

4 generated files · +15 −5
Mcplusplusdefault / quicktype.hpp+2 −2
@@ -205,11 +205,11 @@ namespace quicktype {
205205 if (!j.is_object()) throw std::runtime_error("Expected object");
206206 j.at("acronym");
207207 x.set_acronym(get_stack_optional<std::string>(j, "acronym"));
208- if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
208+ if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
209209 x.set_created_at(j.at("created_at").get<std::string>());
210210 x.set_id(j.at("id").get<std::string>());
211211 x.set_name(j.at("name").get<std::string>());
212- if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
212+ if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
213213 x.set_updated_at(j.at("updated_at").get<std::string>());
214214 x.set_uri(j.at("uri").get<std::string>());
215215 }
Mobjective-cdefault / QTTopLevel.m+4 −2
@@ -228,11 +228,13 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
228228 {
229229 if (self = [super init]) {
230230 if (!dict[@"acronym"]) return nil;
231- if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
231+ if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
232+ if (dict[@"created_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created_at"] substringToIndex:10]]) return nil;
232233 if (![dict[@"created_at"] isKindOfClass:NSString.class]) return nil;
233234 if (![dict[@"id"] isKindOfClass:NSString.class]) return nil;
234235 if (![dict[@"name"] isKindOfClass:NSString.class]) return nil;
235- if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
236+ if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
237+ if (dict[@"updated_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"updated_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"updated_at"] substringToIndex:10]]) return nil;
236238 if (![dict[@"updated_at"] isKindOfClass:NSString.class]) return nil;
237239 if (![dict[@"uri"] isKindOfClass:NSString.class]) return nil;
238240 [self setValuesForKeysWithDictionary:dict];
Mphpdefault / TopLevel.php+8 −0
@@ -593,6 +593,10 @@ class Result {
593593 */
594594 public static function fromCreatedAt(string $value): DateTime {
595595 $tmp = new DateTime($value);
596+ $errors = DateTime::getLastErrors();
597+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
598+ throw new Exception('Invalid date-time');
599+ }
596600 if (!is_a($tmp, 'DateTime')) {
597601 throw new Exception('Attribute Error:Result::');
598602 }
@@ -741,6 +745,10 @@ class Result {
741745 */
742746 public static function fromUpdatedAt(string $value): DateTime {
743747 $tmp = new DateTime($value);
748+ $errors = DateTime::getLastErrors();
749+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
750+ throw new Exception('Invalid date-time');
751+ }
744752 if (!is_a($tmp, 'DateTime')) {
745753 throw new Exception('Attribute Error:Result::');
746754 }
Mswiftdefault / quicktype.swift+1 −1
@@ -186,7 +186,7 @@ func newJSONDecoder() -> JSONDecoder {
186186 let decoder = JSONDecoder()
187187 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
188188 let container = try decoder.singleValueContainer()
189- let dateStr = try container.decode(String.self)
189+ let dateStr = try container.decode(String.self).uppercased()
190190
191191 let formatter = DateFormatter()
192192 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/dbfb3.json

4 generated files · +8 −3
Mcplusplusdefault / quicktype.hpp+1 −1
@@ -716,7 +716,7 @@ namespace quicktype {
716716 if (!j.is_object()) throw std::runtime_error("Expected object");
717717 if (j.find("count") != j.end() && !j.at("count").is_number_integer()) throw std::runtime_error("Expected integer");
718718 x.set_count(j.at("count").get<int64_t>());
719- if (j.find("created") != j.end() && !std::regex_match(j.at("created").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
719+ if (j.find("created") != j.end() && !std::regex_match(j.at("created").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
720720 x.set_created(j.at("created").get<std::string>());
721721 x.set_lang(j.at("lang").get<std::string>());
722722 x.set_results(j.at("results").get<Results>());
Mobjective-cdefault / QTTopLevel.m+2 −1
@@ -244,7 +244,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
244244 if (self = [super init]) {
245245 if (![dict[@"count"] isKindOfClass:NSNumber.class]) return nil;
246246 if ([dict[@"count"] doubleValue] != [dict[@"count"] longLongValue]) return nil;
247- if (dict[@"created"] && [dict[@"created"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
247+ if (dict[@"created"] && [dict[@"created"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
248+ if (dict[@"created"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created"] substringToIndex:10]]) return nil;
248249 if (![dict[@"created"] isKindOfClass:NSString.class]) return nil;
249250 if (![dict[@"lang"] isKindOfClass:NSString.class]) return nil;
250251 if (![dict[@"results"] isKindOfClass:NSDictionary.class]) return nil;
Mphpdefault / TopLevel.php+4 −0
@@ -178,6 +178,10 @@ class Query {
178178 */
179179 public static function fromCreated(string $value): DateTime {
180180 $tmp = new DateTime($value);
181+ $errors = DateTime::getLastErrors();
182+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
183+ throw new Exception('Invalid date-time');
184+ }
181185 if (!is_a($tmp, 'DateTime')) {
182186 throw new Exception('Attribute Error:Query::');
183187 }
Mswiftdefault / quicktype.swift+1 −1
@@ -816,7 +816,7 @@ func newJSONDecoder() -> JSONDecoder {
816816 let decoder = JSONDecoder()
817817 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
818818 let container = try decoder.singleValueContainer()
819- let dateStr = try container.decode(String.self)
819+ let dateStr = try container.decode(String.self).uppercased()
820820
821821 let formatter = DateFormatter()
822822 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/dc44f.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -424,7 +424,7 @@ func newJSONDecoder() -> JSONDecoder {
424424 let decoder = JSONDecoder()
425425 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
426426 let container = try decoder.singleValueContainer()
427- let dateStr = try container.decode(String.self)
427+ let dateStr = try container.decode(String.self).uppercased()
428428
429429 let formatter = DateFormatter()
430430 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/dd1ce.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -424,7 +424,7 @@ func newJSONDecoder() -> JSONDecoder {
424424 let decoder = JSONDecoder()
425425 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
426426 let container = try decoder.singleValueContainer()
427- let dateStr = try container.decode(String.self)
427+ let dateStr = try container.decode(String.self).uppercased()
428428
429429 let formatter = DateFormatter()
430430 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/dec3a.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -467,7 +467,7 @@ func newJSONDecoder() -> JSONDecoder {
467467 let decoder = JSONDecoder()
468468 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
469469 let container = try decoder.singleValueContainer()
470- let dateStr = try container.decode(String.self)
470+ let dateStr = try container.decode(String.self).uppercased()
471471
472472 let formatter = DateFormatter()
473473 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/df957.json

4 generated files · +8 −3
Mcplusplusdefault / quicktype.hpp+1 −1
@@ -711,7 +711,7 @@ namespace quicktype {
711711 if (!j.is_object()) throw std::runtime_error("Expected object");
712712 if (j.find("count") != j.end() && !j.at("count").is_number_integer()) throw std::runtime_error("Expected integer");
713713 x.set_count(j.at("count").get<int64_t>());
714- if (j.find("created") != j.end() && !std::regex_match(j.at("created").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
714+ if (j.find("created") != j.end() && !std::regex_match(j.at("created").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
715715 x.set_created(j.at("created").get<std::string>());
716716 x.set_lang(j.at("lang").get<std::string>());
717717 x.set_results(j.at("results").get<Results>());
Mobjective-cdefault / QTTopLevel.m+2 −1
@@ -217,7 +217,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
217217 if (self = [super init]) {
218218 if (![dict[@"count"] isKindOfClass:NSNumber.class]) return nil;
219219 if ([dict[@"count"] doubleValue] != [dict[@"count"] longLongValue]) return nil;
220- if (dict[@"created"] && [dict[@"created"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
220+ if (dict[@"created"] && [dict[@"created"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
221+ if (dict[@"created"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created"] substringToIndex:10]]) return nil;
221222 if (![dict[@"created"] isKindOfClass:NSString.class]) return nil;
222223 if (![dict[@"lang"] isKindOfClass:NSString.class]) return nil;
223224 if (![dict[@"results"] isKindOfClass:NSDictionary.class]) return nil;
Mphpdefault / TopLevel.php+4 −0
@@ -178,6 +178,10 @@ class Query {
178178 */
179179 public static function fromCreated(string $value): DateTime {
180180 $tmp = new DateTime($value);
181+ $errors = DateTime::getLastErrors();
182+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
183+ throw new Exception('Invalid date-time');
184+ }
181185 if (!is_a($tmp, 'DateTime')) {
182186 throw new Exception('Attribute Error:Query::');
183187 }
Mswiftdefault / quicktype.swift+1 −1
@@ -811,7 +811,7 @@ func newJSONDecoder() -> JSONDecoder {
811811 let decoder = JSONDecoder()
812812 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
813813 let container = try decoder.singleValueContainer()
814- let dateStr = try container.decode(String.self)
814+ let dateStr = try container.decode(String.self).uppercased()
815815
816816 let formatter = DateFormatter()
817817 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/e0ac7.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -725,7 +725,7 @@ func newJSONDecoder() -> JSONDecoder {
725725 let decoder = JSONDecoder()
726726 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
727727 let container = try decoder.singleValueContainer()
728- let dateStr = try container.decode(String.self)
728+ let dateStr = try container.decode(String.self).uppercased()
729729
730730 let formatter = DateFormatter()
731731 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/e2915.json

4 generated files · +8 −3
Mcplusplusdefault / quicktype.hpp+1 −1
@@ -716,7 +716,7 @@ namespace quicktype {
716716 if (!j.is_object()) throw std::runtime_error("Expected object");
717717 if (j.find("count") != j.end() && !j.at("count").is_number_integer()) throw std::runtime_error("Expected integer");
718718 x.set_count(j.at("count").get<int64_t>());
719- if (j.find("created") != j.end() && !std::regex_match(j.at("created").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
719+ if (j.find("created") != j.end() && !std::regex_match(j.at("created").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
720720 x.set_created(j.at("created").get<std::string>());
721721 x.set_lang(j.at("lang").get<std::string>());
722722 x.set_results(j.at("results").get<Results>());
Mobjective-cdefault / QTTopLevel.m+2 −1
@@ -242,7 +242,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
242242 if (self = [super init]) {
243243 if (![dict[@"count"] isKindOfClass:NSNumber.class]) return nil;
244244 if ([dict[@"count"] doubleValue] != [dict[@"count"] longLongValue]) return nil;
245- if (dict[@"created"] && [dict[@"created"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
245+ if (dict[@"created"] && [dict[@"created"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
246+ if (dict[@"created"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created"] substringToIndex:10]]) return nil;
246247 if (![dict[@"created"] isKindOfClass:NSString.class]) return nil;
247248 if (![dict[@"lang"] isKindOfClass:NSString.class]) return nil;
248249 if (![dict[@"results"] isKindOfClass:NSDictionary.class]) return nil;
Mphpdefault / TopLevel.php+4 −0
@@ -178,6 +178,10 @@ class Query {
178178 */
179179 public static function fromCreated(string $value): DateTime {
180180 $tmp = new DateTime($value);
181+ $errors = DateTime::getLastErrors();
182+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
183+ throw new Exception('Invalid date-time');
184+ }
181185 if (!is_a($tmp, 'DateTime')) {
182186 throw new Exception('Attribute Error:Query::');
183187 }
Mswiftdefault / quicktype.swift+1 −1
@@ -815,7 +815,7 @@ func newJSONDecoder() -> JSONDecoder {
815815 let decoder = JSONDecoder()
816816 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
817817 let container = try decoder.singleValueContainer()
818- let dateStr = try container.decode(String.self)
818+ let dateStr = try container.decode(String.self).uppercased()
819819
820820 let formatter = DateFormatter()
821821 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/e2a58.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -86,7 +86,7 @@ func newJSONDecoder() -> JSONDecoder {
8686 let decoder = JSONDecoder()
8787 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8888 let container = try decoder.singleValueContainer()
89- let dateStr = try container.decode(String.self)
89+ let dateStr = try container.decode(String.self).uppercased()
9090
9191 let formatter = DateFormatter()
9292 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/e324e.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -671,7 +671,7 @@ func newJSONDecoder() -> JSONDecoder {
671671 let decoder = JSONDecoder()
672672 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
673673 let container = try decoder.singleValueContainer()
674- let dateStr = try container.decode(String.self)
674+ let dateStr = try container.decode(String.self).uppercased()
675675
676676 let formatter = DateFormatter()
677677 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/e53b5.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -240,7 +240,7 @@ func newJSONDecoder() -> JSONDecoder {
240240 let decoder = JSONDecoder()
241241 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
242242 let container = try decoder.singleValueContainer()
243- let dateStr = try container.decode(String.self)
243+ let dateStr = try container.decode(String.self).uppercased()
244244
245245 let formatter = DateFormatter()
246246 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/e64a0.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -166,7 +166,7 @@ func newJSONDecoder() -> JSONDecoder {
166166 let decoder = JSONDecoder()
167167 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
168168 let container = try decoder.singleValueContainer()
169- let dateStr = try container.decode(String.self)
169+ let dateStr = try container.decode(String.self).uppercased()
170170
171171 let formatter = DateFormatter()
172172 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/e8a0b.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -106,7 +106,7 @@ func newJSONDecoder() -> JSONDecoder {
106106 let decoder = JSONDecoder()
107107 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
108108 let container = try decoder.singleValueContainer()
109- let dateStr = try container.decode(String.self)
109+ let dateStr = try container.decode(String.self).uppercased()
110110
111111 let formatter = DateFormatter()
112112 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/e8b04.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -1703,7 +1703,7 @@ func newJSONDecoder() -> JSONDecoder {
17031703 let decoder = JSONDecoder()
17041704 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
17051705 let container = try decoder.singleValueContainer()
1706- let dateStr = try container.decode(String.self)
1706+ let dateStr = try container.decode(String.self).uppercased()
17071707
17081708 let formatter = DateFormatter()
17091709 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/ed095.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -37,7 +37,7 @@ func newJSONDecoder() -> JSONDecoder {
3737 let decoder = JSONDecoder()
3838 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
3939 let container = try decoder.singleValueContainer()
40- let dateStr = try container.decode(String.self)
40+ let dateStr = try container.decode(String.self).uppercased()
4141
4242 let formatter = DateFormatter()
4343 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/f22f5.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -506,7 +506,7 @@ func newJSONDecoder() -> JSONDecoder {
506506 let decoder = JSONDecoder()
507507 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
508508 let container = try decoder.singleValueContainer()
509- let dateStr = try container.decode(String.self)
509+ let dateStr = try container.decode(String.self).uppercased()
510510
511511 let formatter = DateFormatter()
512512 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/f3139.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -86,7 +86,7 @@ func newJSONDecoder() -> JSONDecoder {
8686 let decoder = JSONDecoder()
8787 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8888 let container = try decoder.singleValueContainer()
89- let dateStr = try container.decode(String.self)
89+ let dateStr = try container.decode(String.self).uppercased()
9090
9191 let formatter = DateFormatter()
9292 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/f3edf.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -106,7 +106,7 @@ func newJSONDecoder() -> JSONDecoder {
106106 let decoder = JSONDecoder()
107107 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
108108 let container = try decoder.singleValueContainer()
109- let dateStr = try container.decode(String.self)
109+ let dateStr = try container.decode(String.self).uppercased()
110110
111111 let formatter = DateFormatter()
112112 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/f466a.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -106,7 +106,7 @@ func newJSONDecoder() -> JSONDecoder {
106106 let decoder = JSONDecoder()
107107 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
108108 let container = try decoder.singleValueContainer()
109- let dateStr = try container.decode(String.self)
109+ let dateStr = try container.decode(String.self).uppercased()
110110
111111 let formatter = DateFormatter()
112112 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/f6a65.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -733,7 +733,7 @@ func newJSONDecoder() -> JSONDecoder {
733733 let decoder = JSONDecoder()
734734 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
735735 let container = try decoder.singleValueContainer()
736- let dateStr = try container.decode(String.self)
736+ let dateStr = try container.decode(String.self).uppercased()
737737
738738 let formatter = DateFormatter()
739739 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/f74d5.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -864,7 +864,7 @@ func newJSONDecoder() -> JSONDecoder {
864864 let decoder = JSONDecoder()
865865 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
866866 let container = try decoder.singleValueContainer()
867- let dateStr = try container.decode(String.self)
867+ let dateStr = try container.decode(String.self).uppercased()
868868
869869 let formatter = DateFormatter()
870870 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/f82d9.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -751,7 +751,7 @@ func newJSONDecoder() -> JSONDecoder {
751751 let decoder = JSONDecoder()
752752 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
753753 let container = try decoder.singleValueContainer()
754- let dateStr = try container.decode(String.self)
754+ let dateStr = try container.decode(String.self).uppercased()
755755
756756 let formatter = DateFormatter()
757757 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/f974d.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -71,7 +71,7 @@ func newJSONDecoder() -> JSONDecoder {
7171 let decoder = JSONDecoder()
7272 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
7373 let container = try decoder.singleValueContainer()
74- let dateStr = try container.decode(String.self)
74+ let dateStr = try container.decode(String.self).uppercased()
7575
7676 let formatter = DateFormatter()
7777 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/faff5.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -103,7 +103,7 @@ func newJSONDecoder() -> JSONDecoder {
103103 let decoder = JSONDecoder()
104104 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105105 let container = try decoder.singleValueContainer()
106- let dateStr = try container.decode(String.self)
106+ let dateStr = try container.decode(String.self).uppercased()
107107
108108 let formatter = DateFormatter()
109109 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/fcca3.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -1676,7 +1676,7 @@ func newJSONDecoder() -> JSONDecoder {
16761676 let decoder = JSONDecoder()
16771677 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
16781678 let container = try decoder.singleValueContainer()
1679- let dateStr = try container.decode(String.self)
1679+ let dateStr = try container.decode(String.self).uppercased()
16801680
16811681 let formatter = DateFormatter()
16821682 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/fd329.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -163,7 +163,7 @@ func newJSONDecoder() -> JSONDecoder {
163163 let decoder = JSONDecoder()
164164 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
165165 let container = try decoder.singleValueContainer()
166- let dateStr = try container.decode(String.self)
166+ let dateStr = try container.decode(String.self).uppercased()
167167
168168 let formatter = DateFormatter()
169169 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/blns-object.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -2519,7 +2519,7 @@ func newJSONDecoder() -> JSONDecoder {
25192519 let decoder = JSONDecoder()
25202520 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
25212521 let container = try decoder.singleValueContainer()
2522- let dateStr = try container.decode(String.self)
2522+ let dateStr = try container.decode(String.self).uppercased()
25232523
25242524 let formatter = DateFormatter()
25252525 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/bug2037.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -186,7 +186,7 @@ func newJSONDecoder() -> JSONDecoder {
186186 let decoder = JSONDecoder()
187187 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
188188 let container = try decoder.singleValueContainer()
189- let dateStr = try container.decode(String.self)
189+ let dateStr = try container.decode(String.self).uppercased()
190190
191191 let formatter = DateFormatter()
192192 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/bug2521.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -103,7 +103,7 @@ func newJSONDecoder() -> JSONDecoder {
103103 let decoder = JSONDecoder()
104104 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105105 let container = try decoder.singleValueContainer()
106- let dateStr = try container.decode(String.self)
106+ let dateStr = try container.decode(String.self).uppercased()
107107
108108 let formatter = DateFormatter()
109109 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/bug2590.json

2 generated files · +5 −1
Mphpdefault / TopLevel.php+4 −0
@@ -140,6 +140,10 @@ class Invoice {
140140 public static function fromCreatedAt(?string $value): ?DateTime {
141141 if (!is_null($value)) {
142142 $tmp = new DateTime($value);
143+ $errors = DateTime::getLastErrors();
144+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
145+ throw new Exception('Invalid date-time');
146+ }
143147 if (!is_a($tmp, 'DateTime')) {
144148 throw new Exception('Attribute Error:Invoice::');
145149 }
Mswiftdefault / quicktype.swift+1 −1
@@ -107,7 +107,7 @@ func newJSONDecoder() -> JSONDecoder {
107107 let decoder = JSONDecoder()
108108 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
109109 let container = try decoder.singleValueContainer()
110- let dateStr = try container.decode(String.self)
110+ let dateStr = try container.decode(String.self).uppercased()
111111
112112 let formatter = DateFormatter()
113113 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/bug2663.json

4 generated files · +8 −3
Mcplusplusdefault / quicktype.hpp+1 −1
@@ -63,7 +63,7 @@ namespace quicktype {
6363 inline void from_json(const json & j, TopLevel& x) {
6464 if (!j.is_object()) throw std::runtime_error("Expected object");
6565 x.set_birthday(j.at("birthday").get<std::string>());
66- if (j.find("lastSeen") != j.end() && !std::regex_match(j.at("lastSeen").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
66+ if (j.find("lastSeen") != j.end() && !std::regex_match(j.at("lastSeen").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
6767 x.set_last_seen(j.at("lastSeen").get<std::string>());
6868 x.set_name(j.at("name").get<std::string>());
6969 }
Mobjective-cdefault / QTTopLevel.m+2 −1
@@ -79,7 +79,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
7979 {
8080 if (self = [super init]) {
8181 if (![dict[@"birthday"] isKindOfClass:NSString.class]) return nil;
82- if (dict[@"lastSeen"] && [dict[@"lastSeen"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
82+ if (dict[@"lastSeen"] && [dict[@"lastSeen"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
83+ if (dict[@"lastSeen"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"lastSeen"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"lastSeen"] substringToIndex:10]]) return nil;
8384 if (![dict[@"lastSeen"] isKindOfClass:NSString.class]) return nil;
8485 if (![dict[@"name"] isKindOfClass:NSString.class]) return nil;
8586 [self setValuesForKeysWithDictionary:dict];
Mphpdefault / TopLevel.php+4 −0
@@ -73,6 +73,10 @@ class TopLevel {
7373 */
7474 public static function fromLastSeen(string $value): DateTime {
7575 $tmp = new DateTime($value);
76+ $errors = DateTime::getLastErrors();
77+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
78+ throw new Exception('Invalid date-time');
79+ }
7680 if (!is_a($tmp, 'DateTime')) {
7781 throw new Exception('Attribute Error:TopLevel::');
7882 }
Mswiftdefault / quicktype.swift+1 −1
@@ -63,7 +63,7 @@ func newJSONDecoder() -> JSONDecoder {
6363 let decoder = JSONDecoder()
6464 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6565 let container = try decoder.singleValueContainer()
66- let dateStr = try container.decode(String.self)
66+ let dateStr = try container.decode(String.self).uppercased()
6767
6868 let formatter = DateFormatter()
6969 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/bug2793.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -150,7 +150,7 @@ func newJSONDecoder() -> JSONDecoder {
150150 let decoder = JSONDecoder()
151151 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
152152 let container = try decoder.singleValueContainer()
153- let dateStr = try container.decode(String.self)
153+ let dateStr = try container.decode(String.self).uppercased()
154154
155155 let formatter = DateFormatter()
156156 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/bug427.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -4016,7 +4016,7 @@ func newJSONDecoder() -> JSONDecoder {
40164016 let decoder = JSONDecoder()
40174017 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
40184018 let container = try decoder.singleValueContainer()
4019- let dateStr = try container.decode(String.self)
4019+ let dateStr = try container.decode(String.self).uppercased()
40204020
40214021 let formatter = DateFormatter()
40224022 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/bug790.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -83,7 +83,7 @@ func newJSONDecoder() -> JSONDecoder {
8383 let decoder = JSONDecoder()
8484 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8585 let container = try decoder.singleValueContainer()
86- let dateStr = try container.decode(String.self)
86+ let dateStr = try container.decode(String.self).uppercased()
8787
8888 let formatter = DateFormatter()
8989 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/bug855-short.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -98,7 +98,7 @@ func newJSONDecoder() -> JSONDecoder {
9898 let decoder = JSONDecoder()
9999 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
100100 let container = try decoder.singleValueContainer()
101- let dateStr = try container.decode(String.self)
101+ let dateStr = try container.decode(String.self).uppercased()
102102
103103 let formatter = DateFormatter()
104104 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/bug863.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -395,7 +395,7 @@ func newJSONDecoder() -> JSONDecoder {
395395 let decoder = JSONDecoder()
396396 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
397397 let container = try decoder.singleValueContainer()
398- let dateStr = try container.decode(String.self)
398+ let dateStr = try container.decode(String.self).uppercased()
399399
400400 let formatter = DateFormatter()
401401 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/coin-pairs.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -131,7 +131,7 @@ func newJSONDecoder() -> JSONDecoder {
131131 let decoder = JSONDecoder()
132132 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
133133 let container = try decoder.singleValueContainer()
134- let dateStr = try container.decode(String.self)
134+ let dateStr = try container.decode(String.self).uppercased()
135135
136136 let formatter = DateFormatter()
137137 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/combinations1.json

15 generated files · +21 −15
Mswift-sendable-objective-cdefault / quicktype.swift+1 −1
@@ -3124,7 +3124,7 @@ func newJSONDecoder() -> JSONDecoder {
31243124 let decoder = JSONDecoder()
31253125 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
31263126 let container = try decoder.singleValueContainer()
3127- let dateStr = try container.decode(String.self)
3127+ let dateStr = try container.decode(String.self).uppercased()
31283128
31293129 let formatter = DateFormatter()
31303130 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftaccess-level-internal--a653a863c206 / quicktype.swift+1 −1
@@ -2780,7 +2780,7 @@ func newJSONDecoder() -> JSONDecoder {
27802780 let decoder = JSONDecoder()
27812781 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
27822782 let container = try decoder.singleValueContainer()
2783- let dateStr = try container.decode(String.self)
2783+ let dateStr = try container.decode(String.self).uppercased()
27842784
27852785 let formatter = DateFormatter()
27862786 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftaccess-level-public--bc6fc37ec004 / quicktype.swift+1 −1
@@ -3110,7 +3110,7 @@ func newJSONDecoder() -> JSONDecoder {
31103110 let decoder = JSONDecoder()
31113111 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
31123112 let container = try decoder.singleValueContainer()
3113- let dateStr = try container.decode(String.self)
3113+ let dateStr = try container.decode(String.self).uppercased()
31143114
31153115 let formatter = DateFormatter()
31163116 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftcoding-keys-false--33058e42a49b / quicktype.swift+1 −1
@@ -2780,7 +2780,7 @@ func newJSONDecoder() -> JSONDecoder {
27802780 let decoder = JSONDecoder()
27812781 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
27822782 let container = try decoder.singleValueContainer()
2783- let dateStr = try container.decode(String.self)
2783+ let dateStr = try container.decode(String.self).uppercased()
27842784
27852785 let formatter = DateFormatter()
27862786 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftcoding-keys-protocol-CaseIterable--169323764eaa / quicktype.swift+1 −1
@@ -2780,7 +2780,7 @@ func newJSONDecoder() -> JSONDecoder {
27802780 let decoder = JSONDecoder()
27812781 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
27822782 let container = try decoder.singleValueContainer()
2783- let dateStr = try container.decode(String.self)
2783+ let dateStr = try container.decode(String.self).uppercased()
27842784
27852785 let formatter = DateFormatter()
27862786 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftdefault / quicktype.swift+1 −1
@@ -2780,7 +2780,7 @@ func newJSONDecoder() -> JSONDecoder {
27802780 let decoder = JSONDecoder()
27812781 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
27822782 let container = try decoder.singleValueContainer()
2783- let dateStr = try container.decode(String.self)
2783+ let dateStr = try container.decode(String.self).uppercased()
27842784
27852785 let formatter = DateFormatter()
27862786 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftdensity-dense--3bfb4c22cfd0 / quicktype.swift+1 −1
@@ -2394,7 +2394,7 @@ func newJSONDecoder() -> JSONDecoder {
23942394 let decoder = JSONDecoder()
23952395 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
23962396 let container = try decoder.singleValueContainer()
2397- let dateStr = try container.decode(String.self)
2397+ let dateStr = try container.decode(String.self).uppercased()
23982398
23992399 let formatter = DateFormatter()
24002400 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftfinal-classes-true__struct-or-class-class--d3c62ec7414d / quicktype.swift+1 −1
@@ -3124,7 +3124,7 @@ func newJSONDecoder() -> JSONDecoder {
31243124 let decoder = JSONDecoder()
31253125 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
31263126 let container = try decoder.singleValueContainer()
3127- let dateStr = try container.decode(String.self)
3127+ let dateStr = try container.decode(String.self).uppercased()
31283128
31293129 let formatter = DateFormatter()
31303130 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftmutable-properties-true--a9feb4120f94 / quicktype.swift+1 −1
@@ -2780,7 +2780,7 @@ func newJSONDecoder() -> JSONDecoder {
27802780 let decoder = JSONDecoder()
27812781 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
27822782 let container = try decoder.singleValueContainer()
2783- let dateStr = try container.decode(String.self)
2783+ let dateStr = try container.decode(String.self).uppercased()
27842784
27852785 let formatter = DateFormatter()
27862786 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftprotocol-equatable--bd9068f466c1 / quicktype.swift+1 −1
@@ -2864,7 +2864,7 @@ func newJSONDecoder() -> JSONDecoder {
28642864 let decoder = JSONDecoder()
28652865 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
28662866 let container = try decoder.singleValueContainer()
2867- let dateStr = try container.decode(String.self)
2867+ let dateStr = try container.decode(String.self).uppercased()
28682868
28692869 let formatter = DateFormatter()
28702870 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftprotocol-hashable--739b516c7897 / quicktype.swift+1 −1
@@ -2864,7 +2864,7 @@ func newJSONDecoder() -> JSONDecoder {
28642864 let decoder = JSONDecoder()
28652865 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
28662866 let container = try decoder.singleValueContainer()
2867- let dateStr = try container.decode(String.self)
2867+ let dateStr = try container.decode(String.self).uppercased()
28682868
28692869 let formatter = DateFormatter()
28702870 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsendable-true__struct-or-class-class--265b1fe2e96e / quicktype.swift+1 −1
@@ -3124,7 +3124,7 @@ func newJSONDecoder() -> JSONDecoder {
31243124 let decoder = JSONDecoder()
31253125 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
31263126 let container = try decoder.singleValueContainer()
3127- let dateStr = try container.decode(String.self)
3127+ let dateStr = try container.decode(String.self).uppercased()
31283128
31293129 let formatter = DateFormatter()
31303130 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsendable-true--1c3982c78639 / quicktype.swift+1 −1
@@ -2780,7 +2780,7 @@ func newJSONDecoder() -> JSONDecoder {
27802780 let decoder = JSONDecoder()
27812781 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
27822782 let container = try decoder.singleValueContainer()
2783- let dateStr = try container.decode(String.self)
2783+ let dateStr = try container.decode(String.self).uppercased()
27842784
27852785 let formatter = DateFormatter()
27862786 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftstruct-or-class-class--238d6c8a12d4 / quicktype.swift+1 −1
@@ -3124,7 +3124,7 @@ func newJSONDecoder() -> JSONDecoder {
31243124 let decoder = JSONDecoder()
31253125 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
31263126 let container = try decoder.singleValueContainer()
3127- let dateStr = try container.decode(String.self)
3127+ let dateStr = try container.decode(String.self).uppercased()
31283128
31293129 let formatter = DateFormatter()
31303130 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsupport-linux-false--4bd8c552e09a / quicktype.swift+7 −1
@@ -2779,7 +2779,13 @@ enum Jacutinga: Codable {
27792779 func newJSONDecoder() -> JSONDecoder {
27802780 let decoder = JSONDecoder()
27812781 if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
2782- decoder.dateDecodingStrategy = .iso8601
2782+ decoder.dateDecodingStrategy = .custom { decoder in
2783+ let dateStr = try decoder.singleValueContainer().decode(String.self).uppercased()
2784+ let dateData = try JSONEncoder().encode(dateStr)
2785+ let dateDecoder = JSONDecoder()
2786+ dateDecoder.dateDecodingStrategy = .iso8601
2787+ return try dateDecoder.decode(Date.self, from: dateData)
2788+ }
27832789 }
27842790 return decoder
27852791 }
Test case

test/inputs/json/priority/combinations2.json

14 generated files · +20 −14
Mswiftaccess-level-internal--a653a863c206 / quicktype.swift+1 −1
@@ -2544,7 +2544,7 @@ func newJSONDecoder() -> JSONDecoder {
25442544 let decoder = JSONDecoder()
25452545 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
25462546 let container = try decoder.singleValueContainer()
2547- let dateStr = try container.decode(String.self)
2547+ let dateStr = try container.decode(String.self).uppercased()
25482548
25492549 let formatter = DateFormatter()
25502550 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftaccess-level-public--bc6fc37ec004 / quicktype.swift+1 −1
@@ -2822,7 +2822,7 @@ func newJSONDecoder() -> JSONDecoder {
28222822 let decoder = JSONDecoder()
28232823 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
28242824 let container = try decoder.singleValueContainer()
2825- let dateStr = try container.decode(String.self)
2825+ let dateStr = try container.decode(String.self).uppercased()
28262826
28272827 let formatter = DateFormatter()
28282828 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftcoding-keys-false--33058e42a49b / quicktype.swift+1 −1
@@ -2544,7 +2544,7 @@ func newJSONDecoder() -> JSONDecoder {
25442544 let decoder = JSONDecoder()
25452545 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
25462546 let container = try decoder.singleValueContainer()
2547- let dateStr = try container.decode(String.self)
2547+ let dateStr = try container.decode(String.self).uppercased()
25482548
25492549 let formatter = DateFormatter()
25502550 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftcoding-keys-protocol-CaseIterable--169323764eaa / quicktype.swift+1 −1
@@ -2544,7 +2544,7 @@ func newJSONDecoder() -> JSONDecoder {
25442544 let decoder = JSONDecoder()
25452545 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
25462546 let container = try decoder.singleValueContainer()
2547- let dateStr = try container.decode(String.self)
2547+ let dateStr = try container.decode(String.self).uppercased()
25482548
25492549 let formatter = DateFormatter()
25502550 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftdefault / quicktype.swift+1 −1
@@ -2544,7 +2544,7 @@ func newJSONDecoder() -> JSONDecoder {
25442544 let decoder = JSONDecoder()
25452545 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
25462546 let container = try decoder.singleValueContainer()
2547- let dateStr = try container.decode(String.self)
2547+ let dateStr = try container.decode(String.self).uppercased()
25482548
25492549 let formatter = DateFormatter()
25502550 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftdensity-dense--3bfb4c22cfd0 / quicktype.swift+1 −1
@@ -2246,7 +2246,7 @@ func newJSONDecoder() -> JSONDecoder {
22462246 let decoder = JSONDecoder()
22472247 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
22482248 let container = try decoder.singleValueContainer()
2249- let dateStr = try container.decode(String.self)
2249+ let dateStr = try container.decode(String.self).uppercased()
22502250
22512251 let formatter = DateFormatter()
22522252 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftfinal-classes-true__struct-or-class-class--d3c62ec7414d / quicktype.swift+1 −1
@@ -2833,7 +2833,7 @@ func newJSONDecoder() -> JSONDecoder {
28332833 let decoder = JSONDecoder()
28342834 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
28352835 let container = try decoder.singleValueContainer()
2836- let dateStr = try container.decode(String.self)
2836+ let dateStr = try container.decode(String.self).uppercased()
28372837
28382838 let formatter = DateFormatter()
28392839 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftmutable-properties-true--a9feb4120f94 / quicktype.swift+1 −1
@@ -2544,7 +2544,7 @@ func newJSONDecoder() -> JSONDecoder {
25442544 let decoder = JSONDecoder()
25452545 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
25462546 let container = try decoder.singleValueContainer()
2547- let dateStr = try container.decode(String.self)
2547+ let dateStr = try container.decode(String.self).uppercased()
25482548
25492549 let formatter = DateFormatter()
25502550 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftprotocol-equatable--bd9068f466c1 / quicktype.swift+1 −1
@@ -2610,7 +2610,7 @@ func newJSONDecoder() -> JSONDecoder {
26102610 let decoder = JSONDecoder()
26112611 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
26122612 let container = try decoder.singleValueContainer()
2613- let dateStr = try container.decode(String.self)
2613+ let dateStr = try container.decode(String.self).uppercased()
26142614
26152615 let formatter = DateFormatter()
26162616 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftprotocol-hashable--739b516c7897 / quicktype.swift+1 −1
@@ -2610,7 +2610,7 @@ func newJSONDecoder() -> JSONDecoder {
26102610 let decoder = JSONDecoder()
26112611 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
26122612 let container = try decoder.singleValueContainer()
2613- let dateStr = try container.decode(String.self)
2613+ let dateStr = try container.decode(String.self).uppercased()
26142614
26152615 let formatter = DateFormatter()
26162616 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsendable-true__struct-or-class-class--265b1fe2e96e / quicktype.swift+1 −1
@@ -2833,7 +2833,7 @@ func newJSONDecoder() -> JSONDecoder {
28332833 let decoder = JSONDecoder()
28342834 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
28352835 let container = try decoder.singleValueContainer()
2836- let dateStr = try container.decode(String.self)
2836+ let dateStr = try container.decode(String.self).uppercased()
28372837
28382838 let formatter = DateFormatter()
28392839 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsendable-true--1c3982c78639 / quicktype.swift+1 −1
@@ -2544,7 +2544,7 @@ func newJSONDecoder() -> JSONDecoder {
25442544 let decoder = JSONDecoder()
25452545 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
25462546 let container = try decoder.singleValueContainer()
2547- let dateStr = try container.decode(String.self)
2547+ let dateStr = try container.decode(String.self).uppercased()
25482548
25492549 let formatter = DateFormatter()
25502550 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftstruct-or-class-class--238d6c8a12d4 / quicktype.swift+1 −1
@@ -2833,7 +2833,7 @@ func newJSONDecoder() -> JSONDecoder {
28332833 let decoder = JSONDecoder()
28342834 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
28352835 let container = try decoder.singleValueContainer()
2836- let dateStr = try container.decode(String.self)
2836+ let dateStr = try container.decode(String.self).uppercased()
28372837
28382838 let formatter = DateFormatter()
28392839 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsupport-linux-false--4bd8c552e09a / quicktype.swift+7 −1
@@ -2543,7 +2543,13 @@ enum Shakespearolater: Codable {
25432543 func newJSONDecoder() -> JSONDecoder {
25442544 let decoder = JSONDecoder()
25452545 if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
2546- decoder.dateDecodingStrategy = .iso8601
2546+ decoder.dateDecodingStrategy = .custom { decoder in
2547+ let dateStr = try decoder.singleValueContainer().decode(String.self).uppercased()
2548+ let dateData = try JSONEncoder().encode(dateStr)
2549+ let dateDecoder = JSONDecoder()
2550+ dateDecoder.dateDecodingStrategy = .iso8601
2551+ return try dateDecoder.decode(Date.self, from: dateData)
2552+ }
25472553 }
25482554 return decoder
25492555 }
Test case

test/inputs/json/priority/combinations3.json

14 generated files · +20 −14
Mswiftaccess-level-internal--a653a863c206 / quicktype.swift+1 −1
@@ -3079,7 +3079,7 @@ func newJSONDecoder() -> JSONDecoder {
30793079 let decoder = JSONDecoder()
30803080 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
30813081 let container = try decoder.singleValueContainer()
3082- let dateStr = try container.decode(String.self)
3082+ let dateStr = try container.decode(String.self).uppercased()
30833083
30843084 let formatter = DateFormatter()
30853085 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftaccess-level-public--bc6fc37ec004 / quicktype.swift+1 −1
@@ -3461,7 +3461,7 @@ func newJSONDecoder() -> JSONDecoder {
34613461 let decoder = JSONDecoder()
34623462 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
34633463 let container = try decoder.singleValueContainer()
3464- let dateStr = try container.decode(String.self)
3464+ let dateStr = try container.decode(String.self).uppercased()
34653465
34663466 let formatter = DateFormatter()
34673467 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftcoding-keys-false--33058e42a49b / quicktype.swift+1 −1
@@ -3079,7 +3079,7 @@ func newJSONDecoder() -> JSONDecoder {
30793079 let decoder = JSONDecoder()
30803080 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
30813081 let container = try decoder.singleValueContainer()
3082- let dateStr = try container.decode(String.self)
3082+ let dateStr = try container.decode(String.self).uppercased()
30833083
30843084 let formatter = DateFormatter()
30853085 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftcoding-keys-protocol-CaseIterable--169323764eaa / quicktype.swift+1 −1
@@ -3079,7 +3079,7 @@ func newJSONDecoder() -> JSONDecoder {
30793079 let decoder = JSONDecoder()
30803080 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
30813081 let container = try decoder.singleValueContainer()
3082- let dateStr = try container.decode(String.self)
3082+ let dateStr = try container.decode(String.self).uppercased()
30833083
30843084 let formatter = DateFormatter()
30853085 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftdefault / quicktype.swift+1 −1
@@ -3079,7 +3079,7 @@ func newJSONDecoder() -> JSONDecoder {
30793079 let decoder = JSONDecoder()
30803080 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
30813081 let container = try decoder.singleValueContainer()
3082- let dateStr = try container.decode(String.self)
3082+ let dateStr = try container.decode(String.self).uppercased()
30833083
30843084 let formatter = DateFormatter()
30853085 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftdensity-dense--3bfb4c22cfd0 / quicktype.swift+1 −1
@@ -2626,7 +2626,7 @@ func newJSONDecoder() -> JSONDecoder {
26262626 let decoder = JSONDecoder()
26272627 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
26282628 let container = try decoder.singleValueContainer()
2629- let dateStr = try container.decode(String.self)
2629+ let dateStr = try container.decode(String.self).uppercased()
26302630
26312631 let formatter = DateFormatter()
26322632 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftfinal-classes-true__struct-or-class-class--d3c62ec7414d / quicktype.swift+1 −1
@@ -3476,7 +3476,7 @@ func newJSONDecoder() -> JSONDecoder {
34763476 let decoder = JSONDecoder()
34773477 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
34783478 let container = try decoder.singleValueContainer()
3479- let dateStr = try container.decode(String.self)
3479+ let dateStr = try container.decode(String.self).uppercased()
34803480
34813481 let formatter = DateFormatter()
34823482 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftmutable-properties-true--a9feb4120f94 / quicktype.swift+1 −1
@@ -3079,7 +3079,7 @@ func newJSONDecoder() -> JSONDecoder {
30793079 let decoder = JSONDecoder()
30803080 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
30813081 let container = try decoder.singleValueContainer()
3082- let dateStr = try container.decode(String.self)
3082+ let dateStr = try container.decode(String.self).uppercased()
30833083
30843084 let formatter = DateFormatter()
30853085 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftprotocol-equatable--bd9068f466c1 / quicktype.swift+1 −1
@@ -3169,7 +3169,7 @@ func newJSONDecoder() -> JSONDecoder {
31693169 let decoder = JSONDecoder()
31703170 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
31713171 let container = try decoder.singleValueContainer()
3172- let dateStr = try container.decode(String.self)
3172+ let dateStr = try container.decode(String.self).uppercased()
31733173
31743174 let formatter = DateFormatter()
31753175 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftprotocol-hashable--739b516c7897 / quicktype.swift+1 −1
@@ -3169,7 +3169,7 @@ func newJSONDecoder() -> JSONDecoder {
31693169 let decoder = JSONDecoder()
31703170 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
31713171 let container = try decoder.singleValueContainer()
3172- let dateStr = try container.decode(String.self)
3172+ let dateStr = try container.decode(String.self).uppercased()
31733173
31743174 let formatter = DateFormatter()
31753175 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsendable-true__struct-or-class-class--265b1fe2e96e / quicktype.swift+1 −1
@@ -3476,7 +3476,7 @@ func newJSONDecoder() -> JSONDecoder {
34763476 let decoder = JSONDecoder()
34773477 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
34783478 let container = try decoder.singleValueContainer()
3479- let dateStr = try container.decode(String.self)
3479+ let dateStr = try container.decode(String.self).uppercased()
34803480
34813481 let formatter = DateFormatter()
34823482 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsendable-true--1c3982c78639 / quicktype.swift+1 −1
@@ -3079,7 +3079,7 @@ func newJSONDecoder() -> JSONDecoder {
30793079 let decoder = JSONDecoder()
30803080 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
30813081 let container = try decoder.singleValueContainer()
3082- let dateStr = try container.decode(String.self)
3082+ let dateStr = try container.decode(String.self).uppercased()
30833083
30843084 let formatter = DateFormatter()
30853085 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftstruct-or-class-class--238d6c8a12d4 / quicktype.swift+1 −1
@@ -3476,7 +3476,7 @@ func newJSONDecoder() -> JSONDecoder {
34763476 let decoder = JSONDecoder()
34773477 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
34783478 let container = try decoder.singleValueContainer()
3479- let dateStr = try container.decode(String.self)
3479+ let dateStr = try container.decode(String.self).uppercased()
34803480
34813481 let formatter = DateFormatter()
34823482 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsupport-linux-false--4bd8c552e09a / quicktype.swift+7 −1
@@ -3078,7 +3078,13 @@ enum Protext: Codable {
30783078 func newJSONDecoder() -> JSONDecoder {
30793079 let decoder = JSONDecoder()
30803080 if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
3081- decoder.dateDecodingStrategy = .iso8601
3081+ decoder.dateDecodingStrategy = .custom { decoder in
3082+ let dateStr = try decoder.singleValueContainer().decode(String.self).uppercased()
3083+ let dateData = try JSONEncoder().encode(dateStr)
3084+ let dateDecoder = JSONDecoder()
3085+ dateDecoder.dateDecodingStrategy = .iso8601
3086+ return try dateDecoder.decode(Date.self, from: dateData)
3087+ }
30823088 }
30833089 return decoder
30843090 }
Test case

test/inputs/json/priority/combinations4.json

14 generated files · +20 −14
Mswiftaccess-level-internal--a653a863c206 / quicktype.swift+1 −1
@@ -3583,7 +3583,7 @@ func newJSONDecoder() -> JSONDecoder {
35833583 let decoder = JSONDecoder()
35843584 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
35853585 let container = try decoder.singleValueContainer()
3586- let dateStr = try container.decode(String.self)
3586+ let dateStr = try container.decode(String.self).uppercased()
35873587
35883588 let formatter = DateFormatter()
35893589 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftaccess-level-public--bc6fc37ec004 / quicktype.swift+1 −1
@@ -4021,7 +4021,7 @@ func newJSONDecoder() -> JSONDecoder {
40214021 let decoder = JSONDecoder()
40224022 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
40234023 let container = try decoder.singleValueContainer()
4024- let dateStr = try container.decode(String.self)
4024+ let dateStr = try container.decode(String.self).uppercased()
40254025
40264026 let formatter = DateFormatter()
40274027 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftcoding-keys-false--33058e42a49b / quicktype.swift+1 −1
@@ -3583,7 +3583,7 @@ func newJSONDecoder() -> JSONDecoder {
35833583 let decoder = JSONDecoder()
35843584 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
35853585 let container = try decoder.singleValueContainer()
3586- let dateStr = try container.decode(String.self)
3586+ let dateStr = try container.decode(String.self).uppercased()
35873587
35883588 let formatter = DateFormatter()
35893589 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftcoding-keys-protocol-CaseIterable--169323764eaa / quicktype.swift+1 −1
@@ -3583,7 +3583,7 @@ func newJSONDecoder() -> JSONDecoder {
35833583 let decoder = JSONDecoder()
35843584 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
35853585 let container = try decoder.singleValueContainer()
3586- let dateStr = try container.decode(String.self)
3586+ let dateStr = try container.decode(String.self).uppercased()
35873587
35883588 let formatter = DateFormatter()
35893589 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftdefault / quicktype.swift+1 −1
@@ -3583,7 +3583,7 @@ func newJSONDecoder() -> JSONDecoder {
35833583 let decoder = JSONDecoder()
35843584 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
35853585 let container = try decoder.singleValueContainer()
3586- let dateStr = try container.decode(String.self)
3586+ let dateStr = try container.decode(String.self).uppercased()
35873587
35883588 let formatter = DateFormatter()
35893589 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftdensity-dense--3bfb4c22cfd0 / quicktype.swift+1 −1
@@ -3053,7 +3053,7 @@ func newJSONDecoder() -> JSONDecoder {
30533053 let decoder = JSONDecoder()
30543054 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
30553055 let container = try decoder.singleValueContainer()
3056- let dateStr = try container.decode(String.self)
3056+ let dateStr = try container.decode(String.self).uppercased()
30573057
30583058 let formatter = DateFormatter()
30593059 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftfinal-classes-true__struct-or-class-class--d3c62ec7414d / quicktype.swift+1 −1
@@ -4038,7 +4038,7 @@ func newJSONDecoder() -> JSONDecoder {
40384038 let decoder = JSONDecoder()
40394039 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
40404040 let container = try decoder.singleValueContainer()
4041- let dateStr = try container.decode(String.self)
4041+ let dateStr = try container.decode(String.self).uppercased()
40424042
40434043 let formatter = DateFormatter()
40444044 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftmutable-properties-true--a9feb4120f94 / quicktype.swift+1 −1
@@ -3583,7 +3583,7 @@ func newJSONDecoder() -> JSONDecoder {
35833583 let decoder = JSONDecoder()
35843584 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
35853585 let container = try decoder.singleValueContainer()
3586- let dateStr = try container.decode(String.self)
3586+ let dateStr = try container.decode(String.self).uppercased()
35873587
35883588 let formatter = DateFormatter()
35893589 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftprotocol-equatable--bd9068f466c1 / quicktype.swift+1 −1
@@ -3685,7 +3685,7 @@ func newJSONDecoder() -> JSONDecoder {
36853685 let decoder = JSONDecoder()
36863686 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
36873687 let container = try decoder.singleValueContainer()
3688- let dateStr = try container.decode(String.self)
3688+ let dateStr = try container.decode(String.self).uppercased()
36893689
36903690 let formatter = DateFormatter()
36913691 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftprotocol-hashable--739b516c7897 / quicktype.swift+1 −1
@@ -3685,7 +3685,7 @@ func newJSONDecoder() -> JSONDecoder {
36853685 let decoder = JSONDecoder()
36863686 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
36873687 let container = try decoder.singleValueContainer()
3688- let dateStr = try container.decode(String.self)
3688+ let dateStr = try container.decode(String.self).uppercased()
36893689
36903690 let formatter = DateFormatter()
36913691 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsendable-true__struct-or-class-class--265b1fe2e96e / quicktype.swift+1 −1
@@ -4038,7 +4038,7 @@ func newJSONDecoder() -> JSONDecoder {
40384038 let decoder = JSONDecoder()
40394039 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
40404040 let container = try decoder.singleValueContainer()
4041- let dateStr = try container.decode(String.self)
4041+ let dateStr = try container.decode(String.self).uppercased()
40424042
40434043 let formatter = DateFormatter()
40444044 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsendable-true--1c3982c78639 / quicktype.swift+1 −1
@@ -3583,7 +3583,7 @@ func newJSONDecoder() -> JSONDecoder {
35833583 let decoder = JSONDecoder()
35843584 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
35853585 let container = try decoder.singleValueContainer()
3586- let dateStr = try container.decode(String.self)
3586+ let dateStr = try container.decode(String.self).uppercased()
35873587
35883588 let formatter = DateFormatter()
35893589 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftstruct-or-class-class--238d6c8a12d4 / quicktype.swift+1 −1
@@ -4038,7 +4038,7 @@ func newJSONDecoder() -> JSONDecoder {
40384038 let decoder = JSONDecoder()
40394039 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
40404040 let container = try decoder.singleValueContainer()
4041- let dateStr = try container.decode(String.self)
4041+ let dateStr = try container.decode(String.self).uppercased()
40424042
40434043 let formatter = DateFormatter()
40444044 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsupport-linux-false--4bd8c552e09a / quicktype.swift+7 −1
@@ -3582,7 +3582,13 @@ extension WrothyClass {
35823582 func newJSONDecoder() -> JSONDecoder {
35833583 let decoder = JSONDecoder()
35843584 if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
3585- decoder.dateDecodingStrategy = .iso8601
3585+ decoder.dateDecodingStrategy = .custom { decoder in
3586+ let dateStr = try decoder.singleValueContainer().decode(String.self).uppercased()
3587+ let dateData = try JSONEncoder().encode(dateStr)
3588+ let dateDecoder = JSONDecoder()
3589+ dateDecoder.dateDecodingStrategy = .iso8601
3590+ return try dateDecoder.decode(Date.self, from: dateData)
3591+ }
35863592 }
35873593 return decoder
35883594 }
Test case

test/inputs/json/priority/combined-enum.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -109,7 +109,7 @@ func newJSONDecoder() -> JSONDecoder {
109109 let decoder = JSONDecoder()
110110 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
111111 let container = try decoder.singleValueContainer()
112- let dateStr = try container.decode(String.self)
112+ let dateStr = try container.decode(String.self).uppercased()
113113
114114 let formatter = DateFormatter()
115115 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/direct-recursive.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -80,7 +80,7 @@ func newJSONDecoder() -> JSONDecoder {
8080 let decoder = JSONDecoder()
8181 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8282 let container = try decoder.singleValueContainer()
83- let dateStr = try container.decode(String.self)
83+ let dateStr = try container.decode(String.self).uppercased()
8484
8585 let formatter = DateFormatter()
8686 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/empty-enum.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -99,7 +99,7 @@ func newJSONDecoder() -> JSONDecoder {
9999 let decoder = JSONDecoder()
100100 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
101101 let container = try decoder.singleValueContainer()
102- let dateStr = try container.decode(String.self)
102+ let dateStr = try container.decode(String.self).uppercased()
103103
104104 let formatter = DateFormatter()
105105 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/identifiers.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -350,7 +350,7 @@ func newJSONDecoder() -> JSONDecoder {
350350 let decoder = JSONDecoder()
351351 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
352352 let container = try decoder.singleValueContainer()
353- let dateStr = try container.decode(String.self)
353+ let dateStr = try container.decode(String.self).uppercased()
354354
355355 let formatter = DateFormatter()
356356 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/issue2680-object-array.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -82,7 +82,7 @@ func newJSONDecoder() -> JSONDecoder {
8282 let decoder = JSONDecoder()
8383 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8484 let container = try decoder.singleValueContainer()
85- let dateStr = try container.decode(String.self)
85+ let dateStr = try container.decode(String.self).uppercased()
8686
8787 let formatter = DateFormatter()
8888 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/issue2680-scalar-array.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -37,7 +37,7 @@ func newJSONDecoder() -> JSONDecoder {
3737 let decoder = JSONDecoder()
3838 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
3939 let container = try decoder.singleValueContainer()
40- let dateStr = try container.decode(String.self)
40+ let dateStr = try container.decode(String.self).uppercased()
4141
4242 let formatter = DateFormatter()
4343 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/keywords.json

7 generated files · +11 −6
Mcplusplusdefault / quicktype.hpp+1 −1
@@ -8952,7 +8952,7 @@ namespace quicktype {
89528952
89538953 inline void from_json(const json & j, DateTime& x) {
89548954 if (!j.is_object()) throw std::runtime_error("Expected object");
8955- if (j.find("DateTime") != j.end() && !std::regex_match(j.at("DateTime").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
8955+ if (j.find("DateTime") != j.end() && !std::regex_match(j.at("DateTime").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
89568956 x.set_date_time(j.at("DateTime").get<std::string>());
89578957 }
Mobjective-cdefault / QTTopLevel.m+2 −1
@@ -6077,7 +6077,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
60776077 - (instancetype)initWithJSONDictionary:(NSDictionary *)dict
60786078 {
60796079 if (self = [super init]) {
6080- if (dict[@"DateTime"] && [dict[@"DateTime"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
6080+ if (dict[@"DateTime"] && [dict[@"DateTime"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
6081+ if (dict[@"DateTime"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"DateTime"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"DateTime"] substringToIndex:10]]) return nil;
60816082 if (![dict[@"DateTime"] isKindOfClass:NSString.class]) return nil;
60826083 [self setValuesForKeysWithDictionary:dict];
60836084 }
Mphpdefault / TopLevel.php+4 −0
@@ -15165,6 +15165,10 @@ class DateTimeClass {
1516515165 */
1516615166 public static function fromDateTime(string $value): DateTime {
1516715167 $tmp = new DateTime($value);
15168+ $errors = DateTime::getLastErrors();
15169+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
15170+ throw new Exception('Invalid date-time');
15171+ }
1516815172 if (!is_a($tmp, 'DateTime')) {
1516915173 throw new Exception('Attribute Error:DateTimeClass::');
1517015174 }
Mswiftdefault / quicktype.swift+1 −1
@@ -17484,7 +17484,7 @@ func newJSONDecoder() -> JSONDecoder {
1748417484 let decoder = JSONDecoder()
1748517485 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
1748617486 let container = try decoder.singleValueContainer()
17487- let dateStr = try container.decode(String.self)
17487+ let dateStr = try container.decode(String.self).uppercased()
1748817488
1748917489 let formatter = DateFormatter()
1749017490 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftobjective-c-support-true__struct-or-class-class--f14372afa3e4 / quicktype.swift+1 −1
@@ -19667,7 +19667,7 @@ func newJSONDecoder() -> JSONDecoder {
1966719667 let decoder = JSONDecoder()
1966819668 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
1966919669 let container = try decoder.singleValueContainer()
19670- let dateStr = try container.decode(String.self)
19670+ let dateStr = try container.decode(String.self).uppercased()
1967119671
1967219672 let formatter = DateFormatter()
1967319673 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftprotocol-equatable--bd9068f466c1 / quicktype.swift+1 −1
@@ -19668,7 +19668,7 @@ func newJSONDecoder() -> JSONDecoder {
1966819668 let decoder = JSONDecoder()
1966919669 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
1967019670 let container = try decoder.singleValueContainer()
19671- let dateStr = try container.decode(String.self)
19671+ let dateStr = try container.decode(String.self).uppercased()
1967219672
1967319673 let formatter = DateFormatter()
1967419674 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsendable-true--1c3982c78639 / quicktype.swift+1 −1
@@ -17484,7 +17484,7 @@ func newJSONDecoder() -> JSONDecoder {
1748417484 let decoder = JSONDecoder()
1748517485 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
1748617486 let container = try decoder.singleValueContainer()
17487- let dateStr = try container.decode(String.self)
17487+ let dateStr = try container.decode(String.self).uppercased()
1748817488
1748917489 let formatter = DateFormatter()
1749017490 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/kotlin-enum-class-case-collision.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -87,7 +87,7 @@ func newJSONDecoder() -> JSONDecoder {
8787 let decoder = JSONDecoder()
8888 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8989 let container = try decoder.singleValueContainer()
90- let dateStr = try container.decode(String.self)
90+ let dateStr = try container.decode(String.self).uppercased()
9191
9292 let formatter = DateFormatter()
9393 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/list.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -65,7 +65,7 @@ func newJSONDecoder() -> JSONDecoder {
6565 let decoder = JSONDecoder()
6666 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6767 let container = try decoder.singleValueContainer()
68- let dateStr = try container.decode(String.self)
68+ let dateStr = try container.decode(String.self).uppercased()
6969
7070 let formatter = DateFormatter()
7171 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/name-style.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -79,7 +79,7 @@ func newJSONDecoder() -> JSONDecoder {
7979 let decoder = JSONDecoder()
8080 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8181 let container = try decoder.singleValueContainer()
82- let dateStr = try container.decode(String.self)
82+ let dateStr = try container.decode(String.self).uppercased()
8383
8484 let formatter = DateFormatter()
8585 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/nbl-stats.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -1559,7 +1559,7 @@ func newJSONDecoder() -> JSONDecoder {
15591559 let decoder = JSONDecoder()
15601560 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
15611561 let container = try decoder.singleValueContainer()
1562- let dateStr = try container.decode(String.self)
1562+ let dateStr = try container.decode(String.self).uppercased()
15631563
15641564 let formatter = DateFormatter()
15651565 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/nested-objects.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -59,7 +59,7 @@ func newJSONDecoder() -> JSONDecoder {
5959 let decoder = JSONDecoder()
6060 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6161 let container = try decoder.singleValueContainer()
62- let dateStr = try container.decode(String.self)
62+ let dateStr = try container.decode(String.self).uppercased()
6363
6464 let formatter = DateFormatter()
6565 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/no-classes.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -12,7 +12,7 @@ func newJSONDecoder() -> JSONDecoder {
1212 let decoder = JSONDecoder()
1313 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
1414 let container = try decoder.singleValueContainer()
15- let dateStr = try container.decode(String.self)
15+ let dateStr = try container.decode(String.self).uppercased()
1616
1717 let formatter = DateFormatter()
1818 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/number-map.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -55,7 +55,7 @@ func newJSONDecoder() -> JSONDecoder {
5555 let decoder = JSONDecoder()
5656 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5757 let container = try decoder.singleValueContainer()
58- let dateStr = try container.decode(String.self)
58+ let dateStr = try container.decode(String.self).uppercased()
5959
6060 let formatter = DateFormatter()
6161 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/omit-empty.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -103,7 +103,7 @@ func newJSONDecoder() -> JSONDecoder {
103103 let decoder = JSONDecoder()
104104 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105105 let container = try decoder.singleValueContainer()
106- let dateStr = try container.decode(String.self)
106+ let dateStr = try container.decode(String.self).uppercased()
107107
108108 let formatter = DateFormatter()
109109 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/optional-union.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -110,7 +110,7 @@ func newJSONDecoder() -> JSONDecoder {
110110 let decoder = JSONDecoder()
111111 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
112112 let container = try decoder.singleValueContainer()
113- let dateStr = try container.decode(String.self)
113+ let dateStr = try container.decode(String.self).uppercased()
114114
115115 let formatter = DateFormatter()
116116 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/php-mixed-union.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -148,7 +148,7 @@ func newJSONDecoder() -> JSONDecoder {
148148 let decoder = JSONDecoder()
149149 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
150150 let container = try decoder.singleValueContainer()
151- let dateStr = try container.decode(String.self)
151+ let dateStr = try container.decode(String.self).uppercased()
152152
153153 let formatter = DateFormatter()
154154 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/php-validation.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -71,7 +71,7 @@ func newJSONDecoder() -> JSONDecoder {
7171 let decoder = JSONDecoder()
7272 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
7373 let container = try decoder.singleValueContainer()
74- let dateStr = try container.decode(String.self)
74+ let dateStr = try container.decode(String.self).uppercased()
7575
7676 let formatter = DateFormatter()
7777 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/recursive.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -979,7 +979,7 @@ func newJSONDecoder() -> JSONDecoder {
979979 let decoder = JSONDecoder()
980980 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
981981 let container = try decoder.singleValueContainer()
982- let dateStr = try container.decode(String.self)
982+ let dateStr = try container.decode(String.self).uppercased()
983983
984984 let formatter = DateFormatter()
985985 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/simple-identifiers.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -87,7 +87,7 @@ func newJSONDecoder() -> JSONDecoder {
8787 let decoder = JSONDecoder()
8888 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8989 let container = try decoder.singleValueContainer()
90- let dateStr = try container.decode(String.self)
90+ let dateStr = try container.decode(String.self).uppercased()
9191
9292 let formatter = DateFormatter()
9393 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/union-constructor-clash.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -131,7 +131,7 @@ func newJSONDecoder() -> JSONDecoder {
131131 let decoder = JSONDecoder()
132132 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
133133 let container = try decoder.singleValueContainer()
134- let dateStr = try container.decode(String.self)
134+ let dateStr = try container.decode(String.self).uppercased()
135135
136136 let formatter = DateFormatter()
137137 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/unions.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -177,7 +177,7 @@ func newJSONDecoder() -> JSONDecoder {
177177 let decoder = JSONDecoder()
178178 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
179179 let container = try decoder.singleValueContainer()
180- let dateStr = try container.decode(String.self)
180+ let dateStr = try container.decode(String.self).uppercased()
181181
182182 let formatter = DateFormatter()
183183 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/url.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -59,7 +59,7 @@ func newJSONDecoder() -> JSONDecoder {
5959 let decoder = JSONDecoder()
6060 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6161 let container = try decoder.singleValueContainer()
62- let dateStr = try container.decode(String.self)
62+ let dateStr = try container.decode(String.self).uppercased()
6363
6464 let formatter = DateFormatter()
6565 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/uuids.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -75,7 +75,7 @@ func newJSONDecoder() -> JSONDecoder {
7575 let decoder = JSONDecoder()
7676 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
7777 let container = try decoder.singleValueContainer()
78- let dateStr = try container.decode(String.self)
78+ let dateStr = try container.decode(String.self).uppercased()
7979
8080 let formatter = DateFormatter()
8181 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/bitcoin-block.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -71,7 +71,7 @@ func newJSONDecoder() -> JSONDecoder {
7171 let decoder = JSONDecoder()
7272 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
7373 let container = try decoder.singleValueContainer()
74- let dateStr = try container.decode(String.self)
74+ let dateStr = try container.decode(String.self).uppercased()
7575
7676 let formatter = DateFormatter()
7777 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/copy-with-property.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -59,7 +59,7 @@ func newJSONDecoder() -> JSONDecoder {
5959 let decoder = JSONDecoder()
6060 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6161 let container = try decoder.singleValueContainer()
62- let dateStr = try container.decode(String.self)
62+ let dateStr = try container.decode(String.self).uppercased()
6363
6464 let formatter = DateFormatter()
6565 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/getting-started.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -59,7 +59,7 @@ func newJSONDecoder() -> JSONDecoder {
5959 let decoder = JSONDecoder()
6060 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6161 let container = try decoder.singleValueContainer()
62- let dateStr = try container.decode(String.self)
62+ let dateStr = try container.decode(String.self).uppercased()
6363
6464 let formatter = DateFormatter()
6565 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/github-events.json

4 generated files · +107 −29
Mcplusplusdefault / quicktype.hpp+14 −14
@@ -1541,13 +1541,13 @@ namespace quicktype {
15411541 inline void from_json(const json & j, Comment& x) {
15421542 if (!j.is_object()) throw std::runtime_error("Expected object");
15431543 x.set_body(j.at("body").get<std::string>());
1544- if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
1544+ if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
15451545 x.set_created_at(j.at("created_at").get<std::string>());
15461546 x.set_html_url(j.at("html_url").get<std::string>());
15471547 if (j.find("id") != j.end() && !j.at("id").is_number_integer()) throw std::runtime_error("Expected integer");
15481548 x.set_id(j.at("id").get<int64_t>());
15491549 x.set_issue_url(j.at("issue_url").get<std::string>());
1550- if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
1550+ if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
15511551 x.set_updated_at(j.at("updated_at").get<std::string>());
15521552 x.set_url(j.at("url").get<std::string>());
15531553 x.set_user(j.at("user").get<User>());
@@ -1619,7 +1619,7 @@ namespace quicktype {
16191619 x.set_closed_at(get_untyped(j, "closed_at"));
16201620 if (j.find("closed_issues") != j.end() && !j.at("closed_issues").is_number_integer()) throw std::runtime_error("Expected integer");
16211621 x.set_closed_issues(j.at("closed_issues").get<int64_t>());
1622- if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
1622+ if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
16231623 x.set_created_at(j.at("created_at").get<std::string>());
16241624 x.set_creator(j.at("creator").get<User>());
16251625 x.set_description(j.at("description").get<std::string>());
@@ -1635,7 +1635,7 @@ namespace quicktype {
16351635 x.set_open_issues(j.at("open_issues").get<int64_t>());
16361636 x.set_state(j.at("state").get<std::string>());
16371637 x.set_title(j.at("title").get<std::string>());
1638- if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
1638+ if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
16391639 x.set_updated_at(j.at("updated_at").get<std::string>());
16401640 x.set_url(j.at("url").get<std::string>());
16411641 }
@@ -1685,7 +1685,7 @@ namespace quicktype {
16851685 if (j.find("comments") != j.end() && !j.at("comments").is_number_integer()) throw std::runtime_error("Expected integer");
16861686 x.set_comments(j.at("comments").get<int64_t>());
16871687 x.set_comments_url(j.at("comments_url").get<std::string>());
1688- if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
1688+ if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
16891689 x.set_created_at(j.at("created_at").get<std::string>());
16901690 x.set_events_url(j.at("events_url").get<std::string>());
16911691 x.set_html_url(j.at("html_url").get<std::string>());
@@ -1703,7 +1703,7 @@ namespace quicktype {
17031703 x.set_repository_url(j.at("repository_url").get<std::string>());
17041704 x.set_state(j.at("state").get<std::string>());
17051705 x.set_title(j.at("title").get<std::string>());
1706- if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
1706+ if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
17071707 x.set_updated_at(j.at("updated_at").get<std::string>());
17081708 x.set_url(j.at("url").get<std::string>());
17091709 x.set_user(j.at("user").get<User>());
@@ -1748,7 +1748,7 @@ namespace quicktype {
17481748 x.set_compare_url(j.at("compare_url").get<std::string>());
17491749 x.set_contents_url(j.at("contents_url").get<std::string>());
17501750 x.set_contributors_url(j.at("contributors_url").get<std::string>());
1751- if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
1751+ if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
17521752 x.set_created_at(j.at("created_at").get<std::string>());
17531753 x.set_default_branch(j.at("default_branch").get<std::string>());
17541754 x.set_deployments_url(j.at("deployments_url").get<std::string>());
@@ -1794,7 +1794,7 @@ namespace quicktype {
17941794 x.set_open_issues_count(j.at("open_issues_count").get<int64_t>());
17951795 x.set_owner(j.at("owner").get<User>());
17961796 x.set_pulls_url(j.at("pulls_url").get<std::string>());
1797- if (j.find("pushed_at") != j.end() && !std::regex_match(j.at("pushed_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
1797+ if (j.find("pushed_at") != j.end() && !std::regex_match(j.at("pushed_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
17981798 x.set_pushed_at(j.at("pushed_at").get<std::string>());
17991799 x.set_releases_url(j.at("releases_url").get<std::string>());
18001800 x.set_repo_private(j.at("private").get<bool>());
@@ -1811,7 +1811,7 @@ namespace quicktype {
18111811 x.set_tags_url(j.at("tags_url").get<std::string>());
18121812 x.set_teams_url(j.at("teams_url").get<std::string>());
18131813 x.set_trees_url(j.at("trees_url").get<std::string>());
1814- if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
1814+ if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
18151815 x.set_updated_at(j.at("updated_at").get<std::string>());
18161816 x.set_url(j.at("url").get<std::string>());
18171817 if (j.find("watchers") != j.end() && !j.at("watchers").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -1955,7 +1955,7 @@ namespace quicktype {
19551955 x.set_body(j.at("body").get<std::string>());
19561956 if (j.find("changed_files") != j.end() && !j.at("changed_files").is_number_integer()) throw std::runtime_error("Expected integer");
19571957 x.set_changed_files(j.at("changed_files").get<int64_t>());
1958- if (j.find("closed_at") != j.end() && !std::regex_match(j.at("closed_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
1958+ if (j.find("closed_at") != j.end() && !std::regex_match(j.at("closed_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
19591959 x.set_closed_at(j.at("closed_at").get<std::string>());
19601960 if (j.find("comments") != j.end() && !j.at("comments").is_number_integer()) throw std::runtime_error("Expected integer");
19611961 x.set_comments(j.at("comments").get<int64_t>());
@@ -1963,7 +1963,7 @@ namespace quicktype {
19631963 if (j.find("commits") != j.end() && !j.at("commits").is_number_integer()) throw std::runtime_error("Expected integer");
19641964 x.set_commits(j.at("commits").get<int64_t>());
19651965 x.set_commits_url(j.at("commits_url").get<std::string>());
1966- if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
1966+ if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
19671967 x.set_created_at(j.at("created_at").get<std::string>());
19681968 if (j.find("deletions") != j.end() && !j.at("deletions").is_number_integer()) throw std::runtime_error("Expected integer");
19691969 x.set_deletions(j.at("deletions").get<int64_t>());
@@ -1980,7 +1980,7 @@ namespace quicktype {
19801980 x.set_mergeable(get_untyped(j, "mergeable"));
19811981 x.set_mergeable_state(j.at("mergeable_state").get<std::string>());
19821982 x.set_merged(j.at("merged").get<bool>());
1983- if (j.find("merged_at") != j.end() && !std::regex_match(j.at("merged_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
1983+ if (j.find("merged_at") != j.end() && !std::regex_match(j.at("merged_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
19841984 x.set_merged_at(j.at("merged_at").get<std::string>());
19851985 x.set_merged_by(j.at("merged_by").get<User>());
19861986 x.set_milestone(get_untyped(j, "milestone"));
@@ -1996,7 +1996,7 @@ namespace quicktype {
19961996 x.set_state(j.at("state").get<std::string>());
19971997 x.set_statuses_url(j.at("statuses_url").get<std::string>());
19981998 x.set_title(j.at("title").get<std::string>());
1999- if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
1999+ if (j.find("updated_at") != j.end() && !std::regex_match(j.at("updated_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
20002000 x.set_updated_at(j.at("updated_at").get<std::string>());
20012001 x.set_url(j.at("url").get<std::string>());
20022002 x.set_user(j.at("user").get<User>());
@@ -2125,7 +2125,7 @@ namespace quicktype {
21252125 inline void from_json(const json & j, TopLevelElement& x) {
21262126 if (!j.is_object()) throw std::runtime_error("Expected object");
21272127 x.set_actor(j.at("actor").get<Actor>());
2128- if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
2128+ if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
21292129 x.set_created_at(j.at("created_at").get<std::string>());
21302130 x.set_id(j.at("id").get<std::string>());
21312131 if (j.find("org") != j.end() && j.at("org").is_null()) throw std::runtime_error("Unexpected null");
Mobjective-cdefault / QTTopLevel.m+28 −14
@@ -194,7 +194,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
194194 {
195195 if (self = [super init]) {
196196 if (![dict[@"actor"] isKindOfClass:NSDictionary.class]) return nil;
197- if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
197+ if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
198+ if (dict[@"created_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created_at"] substringToIndex:10]]) return nil;
198199 if (![dict[@"created_at"] isKindOfClass:NSString.class]) return nil;
199200 if (![dict[@"id"] isKindOfClass:NSString.class]) return nil;
200201 if (![dict[@"public"] isKindOfClass:NSNumber.class]) return nil;
@@ -415,13 +416,15 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
415416 {
416417 if (self = [super init]) {
417418 if (![dict[@"body"] isKindOfClass:NSString.class]) return nil;
418- if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
419+ if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
420+ if (dict[@"created_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created_at"] substringToIndex:10]]) return nil;
419421 if (![dict[@"created_at"] isKindOfClass:NSString.class]) return nil;
420422 if (![dict[@"html_url"] isKindOfClass:NSString.class]) return nil;
421423 if (![dict[@"id"] isKindOfClass:NSNumber.class]) return nil;
422424 if ([dict[@"id"] doubleValue] != [dict[@"id"] longLongValue]) return nil;
423425 if (![dict[@"issue_url"] isKindOfClass:NSString.class]) return nil;
424- if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
426+ if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
427+ if (dict[@"updated_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"updated_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"updated_at"] substringToIndex:10]]) return nil;
425428 if (![dict[@"updated_at"] isKindOfClass:NSString.class]) return nil;
426429 if (![dict[@"url"] isKindOfClass:NSString.class]) return nil;
427430 if (![dict[@"user"] isKindOfClass:NSDictionary.class]) return nil;
@@ -708,7 +711,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
708711 if (![dict[@"comments"] isKindOfClass:NSNumber.class]) return nil;
709712 if ([dict[@"comments"] doubleValue] != [dict[@"comments"] longLongValue]) return nil;
710713 if (![dict[@"comments_url"] isKindOfClass:NSString.class]) return nil;
711- if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
714+ if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
715+ if (dict[@"created_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created_at"] substringToIndex:10]]) return nil;
712716 if (![dict[@"created_at"] isKindOfClass:NSString.class]) return nil;
713717 if (![dict[@"events_url"] isKindOfClass:NSString.class]) return nil;
714718 if (![dict[@"html_url"] isKindOfClass:NSString.class]) return nil;
@@ -723,7 +727,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
723727 if (![dict[@"repository_url"] isKindOfClass:NSString.class]) return nil;
724728 if (![dict[@"state"] isKindOfClass:NSString.class]) return nil;
725729 if (![dict[@"title"] isKindOfClass:NSString.class]) return nil;
726- if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
730+ if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
731+ if (dict[@"updated_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"updated_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"updated_at"] substringToIndex:10]]) return nil;
727732 if (![dict[@"updated_at"] isKindOfClass:NSString.class]) return nil;
728733 if (![dict[@"url"] isKindOfClass:NSString.class]) return nil;
729734 if (![dict[@"user"] isKindOfClass:NSDictionary.class]) return nil;
@@ -873,7 +878,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
873878 if (!dict[@"closed_at"]) return nil;
874879 if (![dict[@"closed_issues"] isKindOfClass:NSNumber.class]) return nil;
875880 if ([dict[@"closed_issues"] doubleValue] != [dict[@"closed_issues"] longLongValue]) return nil;
876- if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
881+ if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
882+ if (dict[@"created_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created_at"] substringToIndex:10]]) return nil;
877883 if (![dict[@"created_at"] isKindOfClass:NSString.class]) return nil;
878884 if (![dict[@"creator"] isKindOfClass:NSDictionary.class]) return nil;
879885 if (!dict[@"due_on"]) return nil;
@@ -888,7 +894,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
888894 if (![dict[@"state"] isKindOfClass:NSString.class]) return nil;
889895 if (![dict[@"description"] isKindOfClass:NSString.class]) return nil;
890896 if (![dict[@"title"] isKindOfClass:NSString.class]) return nil;
891- if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
897+ if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
898+ if (dict[@"updated_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"updated_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"updated_at"] substringToIndex:10]]) return nil;
892899 if (![dict[@"updated_at"] isKindOfClass:NSString.class]) return nil;
893900 if (![dict[@"url"] isKindOfClass:NSString.class]) return nil;
894901 [self setValuesForKeysWithDictionary:dict];
@@ -1052,7 +1059,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
10521059 if (![dict[@"body"] isKindOfClass:NSString.class]) return nil;
10531060 if (![dict[@"changed_files"] isKindOfClass:NSNumber.class]) return nil;
10541061 if ([dict[@"changed_files"] doubleValue] != [dict[@"changed_files"] longLongValue]) return nil;
1055- if (dict[@"closed_at"] && [dict[@"closed_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
1062+ if (dict[@"closed_at"] && [dict[@"closed_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
1063+ if (dict[@"closed_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"closed_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"closed_at"] substringToIndex:10]]) return nil;
10561064 if (![dict[@"closed_at"] isKindOfClass:NSString.class]) return nil;
10571065 if (![dict[@"comments"] isKindOfClass:NSNumber.class]) return nil;
10581066 if ([dict[@"comments"] doubleValue] != [dict[@"comments"] longLongValue]) return nil;
@@ -1060,7 +1068,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
10601068 if (![dict[@"commits"] isKindOfClass:NSNumber.class]) return nil;
10611069 if ([dict[@"commits"] doubleValue] != [dict[@"commits"] longLongValue]) return nil;
10621070 if (![dict[@"commits_url"] isKindOfClass:NSString.class]) return nil;
1063- if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
1071+ if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
1072+ if (dict[@"created_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created_at"] substringToIndex:10]]) return nil;
10641073 if (![dict[@"created_at"] isKindOfClass:NSString.class]) return nil;
10651074 if (![dict[@"deletions"] isKindOfClass:NSNumber.class]) return nil;
10661075 if ([dict[@"deletions"] doubleValue] != [dict[@"deletions"] longLongValue]) return nil;
@@ -1077,7 +1086,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
10771086 if (![dict[@"merge_commit_sha"] isKindOfClass:NSString.class]) return nil;
10781087 if (!dict[@"mergeable"]) return nil;
10791088 if (![dict[@"mergeable_state"] isKindOfClass:NSString.class]) return nil;
1080- if (dict[@"merged_at"] && [dict[@"merged_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
1089+ if (dict[@"merged_at"] && [dict[@"merged_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
1090+ if (dict[@"merged_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"merged_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"merged_at"] substringToIndex:10]]) return nil;
10811091 if (![dict[@"merged_at"] isKindOfClass:NSString.class]) return nil;
10821092 if (![dict[@"merged_by"] isKindOfClass:NSDictionary.class]) return nil;
10831093 if (!dict[@"milestone"]) return nil;
@@ -1093,7 +1103,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
10931103 if (![dict[@"state"] isKindOfClass:NSString.class]) return nil;
10941104 if (![dict[@"statuses_url"] isKindOfClass:NSString.class]) return nil;
10951105 if (![dict[@"title"] isKindOfClass:NSString.class]) return nil;
1096- if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
1106+ if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
1107+ if (dict[@"updated_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"updated_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"updated_at"] substringToIndex:10]]) return nil;
10971108 if (![dict[@"updated_at"] isKindOfClass:NSString.class]) return nil;
10981109 if (![dict[@"url"] isKindOfClass:NSString.class]) return nil;
10991110 if (![dict[@"user"] isKindOfClass:NSDictionary.class]) return nil;
@@ -1307,7 +1318,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
13071318 if (![dict[@"compare_url"] isKindOfClass:NSString.class]) return nil;
13081319 if (![dict[@"contents_url"] isKindOfClass:NSString.class]) return nil;
13091320 if (![dict[@"contributors_url"] isKindOfClass:NSString.class]) return nil;
1310- if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
1321+ if (dict[@"created_at"] && [dict[@"created_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
1322+ if (dict[@"created_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"created_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"created_at"] substringToIndex:10]]) return nil;
13111323 if (![dict[@"created_at"] isKindOfClass:NSString.class]) return nil;
13121324 if (![dict[@"default_branch"] isKindOfClass:NSString.class]) return nil;
13131325 if (![dict[@"deployments_url"] isKindOfClass:NSString.class]) return nil;
@@ -1353,7 +1365,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
13531365 if ([dict[@"open_issues_count"] doubleValue] != [dict[@"open_issues_count"] longLongValue]) return nil;
13541366 if (![dict[@"owner"] isKindOfClass:NSDictionary.class]) return nil;
13551367 if (![dict[@"pulls_url"] isKindOfClass:NSString.class]) return nil;
1356- if (dict[@"pushed_at"] && [dict[@"pushed_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
1368+ if (dict[@"pushed_at"] && [dict[@"pushed_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
1369+ if (dict[@"pushed_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"pushed_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"pushed_at"] substringToIndex:10]]) return nil;
13571370 if (![dict[@"pushed_at"] isKindOfClass:NSString.class]) return nil;
13581371 if (![dict[@"releases_url"] isKindOfClass:NSString.class]) return nil;
13591372 if (![dict[@"size"] isKindOfClass:NSNumber.class]) return nil;
@@ -1370,7 +1383,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
13701383 if (![dict[@"teams_url"] isKindOfClass:NSString.class]) return nil;
13711384 if (![dict[@"description"] isKindOfClass:NSString.class]) return nil;
13721385 if (![dict[@"trees_url"] isKindOfClass:NSString.class]) return nil;
1373- if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
1386+ if (dict[@"updated_at"] && [dict[@"updated_at"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
1387+ if (dict[@"updated_at"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"updated_at"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"updated_at"] substringToIndex:10]]) return nil;
13741388 if (![dict[@"updated_at"] isKindOfClass:NSString.class]) return nil;
13751389 if (![dict[@"url"] isKindOfClass:NSString.class]) return nil;
13761390 if (![dict[@"watchers"] isKindOfClass:NSNumber.class]) return nil;
Mphpdefault / TopLevel.php+64 −0
@@ -89,6 +89,10 @@ class TopLevel {
8989 */
9090 public static function fromCreatedAt(string $value): DateTime {
9191 $tmp = new DateTime($value);
92+ $errors = DateTime::getLastErrors();
93+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
94+ throw new Exception('Invalid date-time');
95+ }
9296 if (!is_a($tmp, 'DateTime')) {
9397 throw new Exception('Attribute Error:TopLevel::');
9498 }
@@ -2082,6 +2086,10 @@ class Comment {
20822086 */
20832087 public static function fromCreatedAt(string $value): DateTime {
20842088 $tmp = new DateTime($value);
2089+ $errors = DateTime::getLastErrors();
2090+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
2091+ throw new Exception('Invalid date-time');
2092+ }
20852093 if (!is_a($tmp, 'DateTime')) {
20862094 throw new Exception('Attribute Error:Comment::');
20872095 }
@@ -2277,6 +2285,10 @@ class Comment {
22772285 */
22782286 public static function fromUpdatedAt(string $value): DateTime {
22792287 $tmp = new DateTime($value);
2288+ $errors = DateTime::getLastErrors();
2289+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
2290+ throw new Exception('Invalid date-time');
2291+ }
22802292 if (!is_a($tmp, 'DateTime')) {
22812293 throw new Exception('Attribute Error:Comment::');
22822294 }
@@ -4299,6 +4311,10 @@ class Issue {
42994311 public static function fromClosedAt(?string $value): ?DateTime {
43004312 if (!is_null($value)) {
43014313 $tmp = new DateTime($value);
4314+ $errors = DateTime::getLastErrors();
4315+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
4316+ throw new Exception('Invalid date-time');
4317+ }
43024318 if (!is_a($tmp, 'DateTime')) {
43034319 throw new Exception('Attribute Error:Issue::');
43044320 }
@@ -4456,6 +4472,10 @@ class Issue {
44564472 */
44574473 public static function fromCreatedAt(string $value): DateTime {
44584474 $tmp = new DateTime($value);
4475+ $errors = DateTime::getLastErrors();
4476+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
4477+ throw new Exception('Invalid date-time');
4478+ }
44594479 if (!is_a($tmp, 'DateTime')) {
44604480 throw new Exception('Attribute Error:Issue::');
44614481 }
@@ -5108,6 +5128,10 @@ class Issue {
51085128 */
51095129 public static function fromUpdatedAt(string $value): DateTime {
51105130 $tmp = new DateTime($value);
5131+ $errors = DateTime::getLastErrors();
5132+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
5133+ throw new Exception('Invalid date-time');
5134+ }
51115135 if (!is_a($tmp, 'DateTime')) {
51125136 throw new Exception('Attribute Error:Issue::');
51135137 }
@@ -5923,6 +5947,10 @@ class Milestone {
59235947 */
59245948 public static function fromCreatedAt(string $value): DateTime {
59255949 $tmp = new DateTime($value);
5950+ $errors = DateTime::getLastErrors();
5951+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
5952+ throw new Exception('Invalid date-time');
5953+ }
59265954 if (!is_a($tmp, 'DateTime')) {
59275955 throw new Exception('Attribute Error:Milestone::');
59285956 }
@@ -6073,6 +6101,10 @@ class Milestone {
60736101 public static function fromDueOn(?string $value): ?DateTime {
60746102 if (!is_null($value)) {
60756103 $tmp = new DateTime($value);
6104+ $errors = DateTime::getLastErrors();
6105+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
6106+ throw new Exception('Invalid date-time');
6107+ }
60766108 if (!is_a($tmp, 'DateTime')) {
60776109 throw new Exception('Attribute Error:Milestone::');
60786110 }
@@ -6465,6 +6497,10 @@ class Milestone {
64656497 */
64666498 public static function fromUpdatedAt(string $value): DateTime {
64676499 $tmp = new DateTime($value);
6500+ $errors = DateTime::getLastErrors();
6501+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
6502+ throw new Exception('Invalid date-time');
6503+ }
64686504 if (!is_a($tmp, 'DateTime')) {
64696505 throw new Exception('Attribute Error:Milestone::');
64706506 }
@@ -7407,6 +7443,10 @@ class PayloadPullRequest {
74077443 */
74087444 public static function fromClosedAt(string $value): DateTime {
74097445 $tmp = new DateTime($value);
7446+ $errors = DateTime::getLastErrors();
7447+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
7448+ throw new Exception('Invalid date-time');
7449+ }
74107450 if (!is_a($tmp, 'DateTime')) {
74117451 throw new Exception('Attribute Error:PayloadPullRequest::');
74127452 }
@@ -7649,6 +7689,10 @@ class PayloadPullRequest {
76497689 */
76507690 public static function fromCreatedAt(string $value): DateTime {
76517691 $tmp = new DateTime($value);
7692+ $errors = DateTime::getLastErrors();
7693+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
7694+ throw new Exception('Invalid date-time');
7695+ }
76527696 if (!is_a($tmp, 'DateTime')) {
76537697 throw new Exception('Attribute Error:PayloadPullRequest::');
76547698 }
@@ -8319,6 +8363,10 @@ class PayloadPullRequest {
83198363 */
83208364 public static function fromMergedAt(string $value): DateTime {
83218365 $tmp = new DateTime($value);
8366+ $errors = DateTime::getLastErrors();
8367+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
8368+ throw new Exception('Invalid date-time');
8369+ }
83228370 if (!is_a($tmp, 'DateTime')) {
83238371 throw new Exception('Attribute Error:PayloadPullRequest::');
83248372 }
@@ -8955,6 +9003,10 @@ class PayloadPullRequest {
89559003 */
89569004 public static function fromUpdatedAt(string $value): DateTime {
89579005 $tmp = new DateTime($value);
9006+ $errors = DateTime::getLastErrors();
9007+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
9008+ throw new Exception('Invalid date-time');
9009+ }
89589010 if (!is_a($tmp, 'DateTime')) {
89599011 throw new Exception('Attribute Error:PayloadPullRequest::');
89609012 }
@@ -10490,6 +10542,10 @@ class BaseRepo {
1049010542 */
1049110543 public static function fromCreatedAt(string $value): DateTime {
1049210544 $tmp = new DateTime($value);
10545+ $errors = DateTime::getLastErrors();
10546+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
10547+ throw new Exception('Invalid date-time');
10548+ }
1049310549 if (!is_a($tmp, 'DateTime')) {
1049410550 throw new Exception('Attribute Error:BaseRepo::');
1049510551 }
@@ -12428,6 +12484,10 @@ class BaseRepo {
1242812484 */
1242912485 public static function fromPushedAt(string $value): DateTime {
1243012486 $tmp = new DateTime($value);
12487+ $errors = DateTime::getLastErrors();
12488+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
12489+ throw new Exception('Invalid date-time');
12490+ }
1243112491 if (!is_a($tmp, 'DateTime')) {
1243212492 throw new Exception('Attribute Error:BaseRepo::');
1243312493 }
@@ -13046,6 +13106,10 @@ class BaseRepo {
1304613106 */
1304713107 public static function fromUpdatedAt(string $value): DateTime {
1304813108 $tmp = new DateTime($value);
13109+ $errors = DateTime::getLastErrors();
13110+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
13111+ throw new Exception('Invalid date-time');
13112+ }
1304913113 if (!is_a($tmp, 'DateTime')) {
1305013114 throw new Exception('Attribute Error:BaseRepo::');
1305113115 }
Mswiftdefault / quicktype.swift+1 −1
@@ -1663,7 +1663,7 @@ func newJSONDecoder() -> JSONDecoder {
16631663 let decoder = JSONDecoder()
16641664 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
16651665 let container = try decoder.singleValueContainer()
1666- let dateStr = try container.decode(String.self)
1666+ let dateStr = try container.decode(String.self).uppercased()
16671667
16681668 let formatter = DateFormatter()
16691669 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/kitchen-sink.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -314,7 +314,7 @@ func newJSONDecoder() -> JSONDecoder {
314314 let decoder = JSONDecoder()
315315 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
316316 let container = try decoder.singleValueContainer()
317- let dateStr = try container.decode(String.self)
317+ let dateStr = try container.decode(String.self).uppercased()
318318
319319 let formatter = DateFormatter()
320320 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/null-safe.json

3 generated files · +6 −2
Mcplusplusdefault / quicktype.hpp+1 −1
@@ -183,7 +183,7 @@ namespace quicktype {
183183 if (!j.is_object()) throw std::runtime_error("Expected object");
184184 if (j.find("address") != j.end() && j.at("address").is_null()) throw std::runtime_error("Unexpected null");
185185 x.set_address(get_stack_optional<Address>(j, "address"));
186- if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
186+ if (j.find("created_at") != j.end() && !std::regex_match(j.at("created_at").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
187187 if (j.find("created_at") != j.end() && j.at("created_at").is_null()) throw std::runtime_error("Unexpected null");
188188 x.set_created_at(get_stack_optional<std::string>(j, "created_at"));
189189 x.set_name(j.at("name").get<std::string>());
Mphpdefault / TopLevel.php+4 −0
@@ -201,6 +201,10 @@ class Item {
201201 public static function fromCreatedAt(?string $value): ?DateTime {
202202 if (!is_null($value)) {
203203 $tmp = new DateTime($value);
204+ $errors = DateTime::getLastErrors();
205+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
206+ throw new Exception('Invalid date-time');
207+ }
204208 if (!is_a($tmp, 'DateTime')) {
205209 throw new Exception('Attribute Error:Item::');
206210 }
Mswiftdefault / quicktype.swift+1 −1
@@ -163,7 +163,7 @@ func newJSONDecoder() -> JSONDecoder {
163163 let decoder = JSONDecoder()
164164 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
165165 let container = try decoder.singleValueContainer()
166- let dateStr = try container.decode(String.self)
166+ let dateStr = try container.decode(String.self).uppercased()
167167
168168 let formatter = DateFormatter()
169169 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/objc-control-characters.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -68,7 +68,7 @@ func newJSONDecoder() -> JSONDecoder {
6868 let decoder = JSONDecoder()
6969 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
7070 let container = try decoder.singleValueContainer()
71- let dateStr = try container.decode(String.self)
71+ let dateStr = try container.decode(String.self).uppercased()
7272
7373 let formatter = DateFormatter()
7474 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/pokedex.json

3 generated files · +3 −3
Mswift-sendable-objective-cdefault / quicktype.swift+1 −1
@@ -272,7 +272,7 @@ func newJSONDecoder() -> JSONDecoder {
272272 let decoder = JSONDecoder()
273273 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
274274 let container = try decoder.singleValueContainer()
275- let dateStr = try container.decode(String.self)
275+ let dateStr = try container.decode(String.self).uppercased()
276276
277277 let formatter = DateFormatter()
278278 formatter.calendar = Calendar(identifier: .iso8601)
Mswift-sendable-objective-cstruct-or-class-struct--aa0cc2601d8a / quicktype.swift+1 −1
@@ -240,7 +240,7 @@ func newJSONDecoder() -> JSONDecoder {
240240 let decoder = JSONDecoder()
241241 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
242242 let container = try decoder.singleValueContainer()
243- let dateStr = try container.decode(String.self)
243+ let dateStr = try container.decode(String.self).uppercased()
244244
245245 let formatter = DateFormatter()
246246 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftdefault / quicktype.swift+1 −1
@@ -240,7 +240,7 @@ func newJSONDecoder() -> JSONDecoder {
240240 let decoder = JSONDecoder()
241241 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
242242 let container = try decoder.singleValueContainer()
243- let dateStr = try container.decode(String.self)
243+ let dateStr = try container.decode(String.self).uppercased()
244244
245245 let formatter = DateFormatter()
246246 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/reddit.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -798,7 +798,7 @@ func newJSONDecoder() -> JSONDecoder {
798798 let decoder = JSONDecoder()
799799 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
800800 let container = try decoder.singleValueContainer()
801- let dateStr = try container.decode(String.self)
801+ let dateStr = try container.decode(String.self).uppercased()
802802
803803 let formatter = DateFormatter()
804804 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/simple-object.json

4 generated files · +4 −4
Mswiftcoding-keys-protocol-CaseIterable--169323764eaa / quicktype.swift+1 −1
@@ -63,7 +63,7 @@ func newJSONDecoder() -> JSONDecoder {
6363 let decoder = JSONDecoder()
6464 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6565 let container = try decoder.singleValueContainer()
66- let dateStr = try container.decode(String.self)
66+ let dateStr = try container.decode(String.self).uppercased()
6767
6868 let formatter = DateFormatter()
6969 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftdefault / quicktype.swift+1 −1
@@ -63,7 +63,7 @@ func newJSONDecoder() -> JSONDecoder {
6363 let decoder = JSONDecoder()
6464 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6565 let container = try decoder.singleValueContainer()
66- let dateStr = try container.decode(String.self)
66+ let dateStr = try container.decode(String.self).uppercased()
6767
6868 let formatter = DateFormatter()
6969 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftfinal-classes-true__struct-or-class-class--d3c62ec7414d / quicktype.swift+1 −1
@@ -70,7 +70,7 @@ func newJSONDecoder() -> JSONDecoder {
7070 let decoder = JSONDecoder()
7171 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
7272 let container = try decoder.singleValueContainer()
73- let dateStr = try container.decode(String.self)
73+ let dateStr = try container.decode(String.self).uppercased()
7474
7575 let formatter = DateFormatter()
7676 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftprotocol-hashable--739b516c7897 / quicktype.swift+1 −1
@@ -69,7 +69,7 @@ func newJSONDecoder() -> JSONDecoder {
6969 let decoder = JSONDecoder()
7070 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
7171 let container = try decoder.singleValueContainer()
72- let dateStr = try container.decode(String.self)
72+ let dateStr = try container.decode(String.self).uppercased()
7373
7474 let formatter = DateFormatter()
7575 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/spotify-album.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -531,7 +531,7 @@ func newJSONDecoder() -> JSONDecoder {
531531 let decoder = JSONDecoder()
532532 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
533533 let container = try decoder.singleValueContainer()
534- let dateStr = try container.decode(String.self)
534+ let dateStr = try container.decode(String.self).uppercased()
535535
536536 let formatter = DateFormatter()
537537 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/us-avg-temperatures.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -163,7 +163,7 @@ func newJSONDecoder() -> JSONDecoder {
163163 let decoder = JSONDecoder()
164164 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
165165 let container = try decoder.singleValueContainer()
166- let dateStr = try container.decode(String.self)
166+ let dateStr = try container.decode(String.self).uppercased()
167167
168168 let formatter = DateFormatter()
169169 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/us-senators.json

1 generated file · +1 −1
Mswiftdefault / quicktype.swift+1 −1
@@ -463,7 +463,7 @@ func newJSONDecoder() -> JSONDecoder {
463463 let decoder = JSONDecoder()
464464 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
465465 let container = try decoder.singleValueContainer()
466- let dateStr = try container.decode(String.self)
466+ let dateStr = try container.decode(String.self).uppercased()
467467
468468 let formatter = DateFormatter()
469469 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/accessors.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -101,7 +101,7 @@ func newJSONDecoder() -> JSONDecoder {
101101 let decoder = JSONDecoder()
102102 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
103103 let container = try decoder.singleValueContainer()
104- let dateStr = try container.decode(String.self)
104+ let dateStr = try container.decode(String.self).uppercased()
105105
106106 let formatter = DateFormatter()
107107 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/all-of-additional-properties-false.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -78,7 +78,7 @@ func newJSONDecoder() -> JSONDecoder {
7878 let decoder = JSONDecoder()
7979 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8080 let container = try decoder.singleValueContainer()
81- let dateStr = try container.decode(String.self)
81+ let dateStr = try container.decode(String.self).uppercased()
8282
8383 let formatter = DateFormatter()
8484 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/any.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -59,7 +59,7 @@ func newJSONDecoder() -> JSONDecoder {
5959 let decoder = JSONDecoder()
6060 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6161 let container = try decoder.singleValueContainer()
62- let dateStr = try container.decode(String.self)
62+ let dateStr = try container.decode(String.self).uppercased()
6363
6464 let formatter = DateFormatter()
6565 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/bool-string.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -107,7 +107,7 @@ func newJSONDecoder() -> JSONDecoder {
107107 let decoder = JSONDecoder()
108108 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
109109 let container = try decoder.singleValueContainer()
110- let dateStr = try container.decode(String.self)
110+ let dateStr = try container.decode(String.self).uppercased()
111111
112112 let formatter = DateFormatter()
113113 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/boolean-subschema.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -67,7 +67,7 @@ func newJSONDecoder() -> JSONDecoder {
6767 let decoder = JSONDecoder()
6868 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6969 let container = try decoder.singleValueContainer()
70- let dateStr = try container.decode(String.self)
70+ let dateStr = try container.decode(String.self).uppercased()
7171
7272 let formatter = DateFormatter()
7373 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/camelCase.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -59,7 +59,7 @@ func newJSONDecoder() -> JSONDecoder {
5959 let decoder = JSONDecoder()
6060 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6161 let container = try decoder.singleValueContainer()
62- let dateStr = try container.decode(String.self)
62+ let dateStr = try container.decode(String.self).uppercased()
6363
6464 let formatter = DateFormatter()
6565 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/class-map-union.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -141,7 +141,7 @@ func newJSONDecoder() -> JSONDecoder {
141141 let decoder = JSONDecoder()
142142 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
143143 let container = try decoder.singleValueContainer()
144- let dateStr = try container.decode(String.self)
144+ let dateStr = try container.decode(String.self).uppercased()
145145
146146 let formatter = DateFormatter()
147147 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/class-with-additional.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -83,7 +83,7 @@ func newJSONDecoder() -> JSONDecoder {
8383 let decoder = JSONDecoder()
8484 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8585 let container = try decoder.singleValueContainer()
86- let dateStr = try container.decode(String.self)
86+ let dateStr = try container.decode(String.self).uppercased()
8787
8888 let formatter = DateFormatter()
8989 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/comment-injection-enum-nested-comment.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -67,7 +67,7 @@ func newJSONDecoder() -> JSONDecoder {
6767 let decoder = JSONDecoder()
6868 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6969 let container = try decoder.singleValueContainer()
70- let dateStr = try container.decode(String.self)
70+ let dateStr = try container.decode(String.self).uppercased()
7171
7272 let formatter = DateFormatter()
7373 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/comment-injection-enum.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -73,7 +73,7 @@ func newJSONDecoder() -> JSONDecoder {
7373 let decoder = JSONDecoder()
7474 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
7575 let container = try decoder.singleValueContainer()
76- let dateStr = try container.decode(String.self)
76+ let dateStr = try container.decode(String.self).uppercased()
7777
7878 let formatter = DateFormatter()
7979 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/comment-injection-nested-comment.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -63,7 +63,7 @@ func newJSONDecoder() -> JSONDecoder {
6363 let decoder = JSONDecoder()
6464 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6565 let container = try decoder.singleValueContainer()
66- let dateStr = try container.decode(String.self)
66+ let dateStr = try container.decode(String.self).uppercased()
6767
6868 let formatter = DateFormatter()
6969 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/comment-injection.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -94,7 +94,7 @@ func newJSONDecoder() -> JSONDecoder {
9494 let decoder = JSONDecoder()
9595 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
9696 let container = try decoder.singleValueContainer()
97- let dateStr = try container.decode(String.self)
97+ let dateStr = try container.decode(String.self).uppercased()
9898
9999 let formatter = DateFormatter()
100100 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/const-non-string.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -75,7 +75,7 @@ func newJSONDecoder() -> JSONDecoder {
7575 let decoder = JSONDecoder()
7676 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
7777 let container = try decoder.singleValueContainer()
78- let dateStr = try container.decode(String.self)
78+ let dateStr = try container.decode(String.self).uppercased()
7979
8080 let formatter = DateFormatter()
8181 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/constructor.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -126,7 +126,7 @@ func newJSONDecoder() -> JSONDecoder {
126126 let decoder = JSONDecoder()
127127 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
128128 let container = try decoder.singleValueContainer()
129- let dateStr = try container.decode(String.self)
129+ let dateStr = try container.decode(String.self).uppercased()
130130
131131 let formatter = DateFormatter()
132132 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/cut-enum.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -55,7 +55,7 @@ func newJSONDecoder() -> JSONDecoder {
5555 let decoder = JSONDecoder()
5656 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5757 let container = try decoder.singleValueContainer()
58- let dateStr = try container.decode(String.self)
58+ let dateStr = try container.decode(String.self).uppercased()
5959
6060 let formatter = DateFormatter()
6161 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/date-time-or-string.schema

2 generated files · +5 −1
Mschema-phpdefault / TopLevel.php+4 −0
@@ -26,6 +26,10 @@ class TopLevel {
2626 return Bar::from($value); /*enum*/
2727 } elseif (is_string($value)) {
2828 $tmp = new DateTime($value);
29+ $errors = DateTime::getLastErrors();
30+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
31+ throw new Exception('Invalid date-time');
32+ }
2933 if (!is_a($tmp, 'DateTime')) {
3034 throw new Exception('Attribute Error:TopLevel::');
3135 }
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -91,7 +91,7 @@ func newJSONDecoder() -> JSONDecoder {
9191 let decoder = JSONDecoder()
9292 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
9393 let container = try decoder.singleValueContainer()
94- let dateStr = try container.decode(String.self)
94+ let dateStr = try container.decode(String.self).uppercased()
9595
9696 let formatter = DateFormatter()
9797 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/date-time.schema

4 generated files · +12 −3
Mschema-cplusplusdefault / quicktype.hpp+1 −1
@@ -234,7 +234,7 @@ namespace quicktype {
234234 if (!j.is_object()) throw std::runtime_error("Expected object");
235235 x.set_complex_union_array(j.at("complex-union-array").get<std::vector<ComplexUnionArrayElement>>());
236236 x.set_date(j.at("date").get<std::string>());
237- if (j.find("date-time") != j.end() && !std::regex_match(j.at("date-time").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
237+ if (j.find("date-time") != j.end() && !std::regex_match(j.at("date-time").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
238238 x.set_date_time(j.at("date-time").get<std::string>());
239239 if (j.find("local-date-class") != j.end() && j.at("local-date-class").is_null()) throw std::runtime_error("Unexpected null");
240240 x.set_local_date_class(get_stack_optional<LocalDate>(j, "local-date-class"));
Mschema-objective-cdefault / QTTopLevel.m+2 −1
@@ -139,7 +139,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
139139 if (self = [super init]) {
140140 if (![dict[@"complex-union-array"] isKindOfClass:NSArray.class]) return nil;
141141 if (![dict[@"date"] isKindOfClass:NSString.class]) return nil;
142- if (dict[@"date-time"] && [dict[@"date-time"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
142+ if (dict[@"date-time"] && [dict[@"date-time"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
143+ if (dict[@"date-time"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"date-time"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"date-time"] substringToIndex:10]]) return nil;
143144 if (![dict[@"date-time"] isKindOfClass:NSString.class]) return nil;
144145 if (![dict[@"time"] isKindOfClass:NSString.class]) return nil;
145146 if (![dict[@"union-array"] isKindOfClass:NSArray.class]) return nil;
Mschema-phpdefault / TopLevel.php+8 −0
@@ -45,6 +45,10 @@ class TopLevel {
4545 return ComplexUnionArray::from($value); /*enum*/
4646 } elseif (is_string($value)) {
4747 $tmp = new DateTime($value);
48+ $errors = DateTime::getLastErrors();
49+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
50+ throw new Exception('Invalid date-time');
51+ }
4852 if (!is_a($tmp, 'DateTime')) {
4953 throw new Exception('Attribute Error:TopLevel::');
5054 }
@@ -179,6 +183,10 @@ class TopLevel {
179183 */
180184 public static function fromDateTime(string $value): DateTime {
181185 $tmp = new DateTime($value);
186+ $errors = DateTime::getLastErrors();
187+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
188+ throw new Exception('Invalid date-time');
189+ }
182190 if (!is_a($tmp, 'DateTime')) {
183191 throw new Exception('Attribute Error:TopLevel::');
184192 }
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -252,7 +252,7 @@ func newJSONDecoder() -> JSONDecoder {
252252 let decoder = JSONDecoder()
253253 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
254254 let container = try decoder.singleValueContainer()
255- let dateStr = try container.decode(String.self)
255+ let dateStr = try container.decode(String.self).uppercased()
256256
257257 let formatter = DateFormatter()
258258 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/default-value.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -56,7 +56,7 @@ func newJSONDecoder() -> JSONDecoder {
5656 let decoder = JSONDecoder()
5757 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5858 let container = try decoder.singleValueContainer()
59- let dateStr = try container.decode(String.self)
59+ let dateStr = try container.decode(String.self).uppercased()
6060
6161 let formatter = DateFormatter()
6262 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/description-with-double-quotes.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -56,7 +56,7 @@ func newJSONDecoder() -> JSONDecoder {
5656 let decoder = JSONDecoder()
5757 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5858 let container = try decoder.singleValueContainer()
59- let dateStr = try container.decode(String.self)
59+ let dateStr = try container.decode(String.self).uppercased()
6060
6161 let formatter = DateFormatter()
6262 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/description.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -184,7 +184,7 @@ func newJSONDecoder() -> JSONDecoder {
184184 let decoder = JSONDecoder()
185185 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
186186 let container = try decoder.singleValueContainer()
187- let dateStr = try container.decode(String.self)
187+ let dateStr = try container.decode(String.self).uppercased()
188188
189189 let formatter = DateFormatter()
190190 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/direct-union.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -542,7 +542,7 @@ func newJSONDecoder() -> JSONDecoder {
542542 let decoder = JSONDecoder()
543543 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
544544 let container = try decoder.singleValueContainer()
545- let dateStr = try container.decode(String.self)
545+ let dateStr = try container.decode(String.self).uppercased()
546546
547547 let formatter = DateFormatter()
548548 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/empty-object.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -37,7 +37,7 @@ func newJSONDecoder() -> JSONDecoder {
3737 let decoder = JSONDecoder()
3838 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
3939 let container = try decoder.singleValueContainer()
40- let dateStr = try container.decode(String.self)
40+ let dateStr = try container.decode(String.self).uppercased()
4141
4242 let formatter = DateFormatter()
4343 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/enum-large.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -88,7 +88,7 @@ func newJSONDecoder() -> JSONDecoder {
8888 let decoder = JSONDecoder()
8989 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
9090 let container = try decoder.singleValueContainer()
91- let dateStr = try container.decode(String.self)
91+ let dateStr = try container.decode(String.self).uppercased()
9292
9393 let formatter = DateFormatter()
9494 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/enum-with-null.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -60,7 +60,7 @@ func newJSONDecoder() -> JSONDecoder {
6060 let decoder = JSONDecoder()
6161 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6262 let container = try decoder.singleValueContainer()
63- let dateStr = try container.decode(String.self)
63+ let dateStr = try container.decode(String.self).uppercased()
6464
6565 let formatter = DateFormatter()
6666 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/enum-with-values.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -65,7 +65,7 @@ func newJSONDecoder() -> JSONDecoder {
6565 let decoder = JSONDecoder()
6666 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6767 let container = try decoder.singleValueContainer()
68- let dateStr = try container.decode(String.self)
68+ let dateStr = try container.decode(String.self).uppercased()
6969
7070 let formatter = DateFormatter()
7171 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/enum.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -117,7 +117,7 @@ func newJSONDecoder() -> JSONDecoder {
117117 let decoder = JSONDecoder()
118118 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
119119 let container = try decoder.singleValueContainer()
120- let dateStr = try container.decode(String.self)
120+ let dateStr = try container.decode(String.self).uppercased()
121121
122122 let formatter = DateFormatter()
123123 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/fractional-bounds.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -55,7 +55,7 @@ func newJSONDecoder() -> JSONDecoder {
5555 let decoder = JSONDecoder()
5656 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5757 let container = try decoder.singleValueContainer()
58- let dateStr = try container.decode(String.self)
58+ let dateStr = try container.decode(String.self).uppercased()
5959
6060 let formatter = DateFormatter()
6161 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/go-schema-pattern-properties.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -55,7 +55,7 @@ func newJSONDecoder() -> JSONDecoder {
5555 let decoder = JSONDecoder()
5656 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5757 let container = try decoder.singleValueContainer()
58- let dateStr = try container.decode(String.self)
58+ let dateStr = try container.decode(String.self).uppercased()
5959
6060 let formatter = DateFormatter()
6161 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/haskell-enum-forbidden.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -60,7 +60,7 @@ func newJSONDecoder() -> JSONDecoder {
6060 let decoder = JSONDecoder()
6161 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6262 let container = try decoder.singleValueContainer()
63- let dateStr = try container.decode(String.self)
63+ let dateStr = try container.decode(String.self).uppercased()
6464
6565 let formatter = DateFormatter()
6666 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/id-no-address.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -55,7 +55,7 @@ func newJSONDecoder() -> JSONDecoder {
5555 let decoder = JSONDecoder()
5656 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5757 let container = try decoder.singleValueContainer()
58- let dateStr = try container.decode(String.self)
58+ let dateStr = try container.decode(String.self).uppercased()
5959
6060 let formatter = DateFormatter()
6161 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/id-root.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -55,7 +55,7 @@ func newJSONDecoder() -> JSONDecoder {
5555 let decoder = JSONDecoder()
5656 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5757 let container = try decoder.singleValueContainer()
58- let dateStr = try container.decode(String.self)
58+ let dateStr = try container.decode(String.self).uppercased()
5959
6060 let formatter = DateFormatter()
6161 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/ie-suffix-singularization.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -103,7 +103,7 @@ func newJSONDecoder() -> JSONDecoder {
103103 let decoder = JSONDecoder()
104104 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105105 let container = try decoder.singleValueContainer()
106- let dateStr = try container.decode(String.self)
106+ let dateStr = try container.decode(String.self).uppercased()
107107
108108 let formatter = DateFormatter()
109109 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/implicit-all-of.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -63,7 +63,7 @@ func newJSONDecoder() -> JSONDecoder {
6363 let decoder = JSONDecoder()
6464 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6565 let container = try decoder.singleValueContainer()
66- let dateStr = try container.decode(String.self)
66+ let dateStr = try container.decode(String.self).uppercased()
6767
6868 let formatter = DateFormatter()
6969 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/implicit-class-array-union.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -162,7 +162,7 @@ func newJSONDecoder() -> JSONDecoder {
162162 let decoder = JSONDecoder()
163163 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
164164 let container = try decoder.singleValueContainer()
165- let dateStr = try container.decode(String.self)
165+ let dateStr = try container.decode(String.self).uppercased()
166166
167167 let formatter = DateFormatter()
168168 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/implicit-one-of.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -63,7 +63,7 @@ func newJSONDecoder() -> JSONDecoder {
6363 let decoder = JSONDecoder()
6464 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6565 let container = try decoder.singleValueContainer()
66- let dateStr = try container.decode(String.self)
66+ let dateStr = try container.decode(String.self).uppercased()
6767
6868 let formatter = DateFormatter()
6969 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/integer-before-number.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -40,7 +40,7 @@ func newJSONDecoder() -> JSONDecoder {
4040 let decoder = JSONDecoder()
4141 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
4242 let container = try decoder.singleValueContainer()
43- let dateStr = try container.decode(String.self)
43+ let dateStr = try container.decode(String.self).uppercased()
4444
4545 let formatter = DateFormatter()
4646 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/integer-float-union.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -83,7 +83,7 @@ func newJSONDecoder() -> JSONDecoder {
8383 let decoder = JSONDecoder()
8484 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8585 let container = try decoder.singleValueContainer()
86- let dateStr = try container.decode(String.self)
86+ let dateStr = try container.decode(String.self).uppercased()
8787
8888 let formatter = DateFormatter()
8989 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/integer-string.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -107,7 +107,7 @@ func newJSONDecoder() -> JSONDecoder {
107107 let decoder = JSONDecoder()
108108 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
109109 let container = try decoder.singleValueContainer()
110- let dateStr = try container.decode(String.self)
110+ let dateStr = try container.decode(String.self).uppercased()
111111
112112 let formatter = DateFormatter()
113113 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/integer-type.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -87,7 +87,7 @@ func newJSONDecoder() -> JSONDecoder {
8787 let decoder = JSONDecoder()
8888 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8989 let container = try decoder.singleValueContainer()
90- let dateStr = try container.decode(String.self)
90+ let dateStr = try container.decode(String.self).uppercased()
9191
9292 let formatter = DateFormatter()
9393 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/intersection-nested.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -55,7 +55,7 @@ func newJSONDecoder() -> JSONDecoder {
5555 let decoder = JSONDecoder()
5656 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5757 let container = try decoder.singleValueContainer()
58- let dateStr = try container.decode(String.self)
58+ let dateStr = try container.decode(String.self).uppercased()
5959
6060 let formatter = DateFormatter()
6161 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/intersection.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -103,7 +103,7 @@ func newJSONDecoder() -> JSONDecoder {
103103 let decoder = JSONDecoder()
104104 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105105 let container = try decoder.singleValueContainer()
106- let dateStr = try container.decode(String.self)
106+ let dateStr = try container.decode(String.self).uppercased()
107107
108108 let formatter = DateFormatter()
109109 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/issue2680-top-level-array.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -37,7 +37,7 @@ func newJSONDecoder() -> JSONDecoder {
3737 let decoder = JSONDecoder()
3838 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
3939 let container = try decoder.singleValueContainer()
40- let dateStr = try container.decode(String.self)
40+ let dateStr = try container.decode(String.self).uppercased()
4141
4242 let formatter = DateFormatter()
4343 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/keyword-enum.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -416,7 +416,7 @@ func newJSONDecoder() -> JSONDecoder {
416416 let decoder = JSONDecoder()
417417 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
418418 let container = try decoder.singleValueContainer()
419- let dateStr = try container.decode(String.self)
419+ let dateStr = try container.decode(String.self).uppercased()
420420
421421 let formatter = DateFormatter()
422422 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/keyword-unions.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -26830,7 +26830,7 @@ func newJSONDecoder() -> JSONDecoder {
2683026830 let decoder = JSONDecoder()
2683126831 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
2683226832 let container = try decoder.singleValueContainer()
26833- let dateStr = try container.decode(String.self)
26833+ let dateStr = try container.decode(String.self).uppercased()
2683426834
2683526835 let formatter = DateFormatter()
2683626836 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/light.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -107,7 +107,7 @@ func newJSONDecoder() -> JSONDecoder {
107107 let decoder = JSONDecoder()
108108 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
109109 let container = try decoder.singleValueContainer()
110- let dateStr = try container.decode(String.self)
110+ let dateStr = try container.decode(String.self).uppercased()
111111
112112 let formatter = DateFormatter()
113113 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/list.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -61,7 +61,7 @@ func newJSONDecoder() -> JSONDecoder {
6161 let decoder = JSONDecoder()
6262 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6363 let container = try decoder.singleValueContainer()
64- let dateStr = try container.decode(String.self)
64+ let dateStr = try container.decode(String.self).uppercased()
6565
6666 let formatter = DateFormatter()
6767 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/min-max-items.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -99,7 +99,7 @@ func newJSONDecoder() -> JSONDecoder {
9999 let decoder = JSONDecoder()
100100 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
101101 let container = try decoder.singleValueContainer()
102- let dateStr = try container.decode(String.self)
102+ let dateStr = try container.decode(String.self).uppercased()
103103
104104 let formatter = DateFormatter()
105105 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/minmax-integer.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -83,7 +83,7 @@ func newJSONDecoder() -> JSONDecoder {
8383 let decoder = JSONDecoder()
8484 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8585 let container = try decoder.singleValueContainer()
86- let dateStr = try container.decode(String.self)
86+ let dateStr = try container.decode(String.self).uppercased()
8787
8888 let formatter = DateFormatter()
8989 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/minmax.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -83,7 +83,7 @@ func newJSONDecoder() -> JSONDecoder {
8383 let decoder = JSONDecoder()
8484 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8585 let container = try decoder.singleValueContainer()
86- let dateStr = try container.decode(String.self)
86+ let dateStr = try container.decode(String.self).uppercased()
8787
8888 let formatter = DateFormatter()
8989 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/minmaxlength.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -111,7 +111,7 @@ func newJSONDecoder() -> JSONDecoder {
111111 let decoder = JSONDecoder()
112112 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
113113 let container = try decoder.singleValueContainer()
114- let dateStr = try container.decode(String.self)
114+ let dateStr = try container.decode(String.self).uppercased()
115115
116116 let formatter = DateFormatter()
117117 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/multi-type-enum.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -103,7 +103,7 @@ func newJSONDecoder() -> JSONDecoder {
103103 let decoder = JSONDecoder()
104104 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105105 let container = try decoder.singleValueContainer()
106- let dateStr = try container.decode(String.self)
106+ let dateStr = try container.decode(String.self).uppercased()
107107
108108 let formatter = DateFormatter()
109109 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/mutually-recursive.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -132,7 +132,7 @@ func newJSONDecoder() -> JSONDecoder {
132132 let decoder = JSONDecoder()
133133 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
134134 let container = try decoder.singleValueContainer()
135- let dateStr = try container.decode(String.self)
135+ let dateStr = try container.decode(String.self).uppercased()
136136
137137 let formatter = DateFormatter()
138138 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/nested-intersection-union.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -111,7 +111,7 @@ func newJSONDecoder() -> JSONDecoder {
111111 let decoder = JSONDecoder()
112112 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
113113 let container = try decoder.singleValueContainer()
114- let dateStr = try container.decode(String.self)
114+ let dateStr = try container.decode(String.self).uppercased()
115115
116116 let formatter = DateFormatter()
117117 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/non-standard-ref.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -63,7 +63,7 @@ func newJSONDecoder() -> JSONDecoder {
6363 let decoder = JSONDecoder()
6464 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6565 let container = try decoder.singleValueContainer()
66- let dateStr = try container.decode(String.self)
66+ let dateStr = try container.decode(String.self).uppercased()
6767
6868 let formatter = DateFormatter()
6969 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/nullable-optional-one-of.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -64,7 +64,7 @@ func newJSONDecoder() -> JSONDecoder {
6464 let decoder = JSONDecoder()
6565 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6666 let container = try decoder.singleValueContainer()
67- let dateStr = try container.decode(String.self)
67+ let dateStr = try container.decode(String.self).uppercased()
6868
6969 let formatter = DateFormatter()
7070 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/object-type-required.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -106,7 +106,7 @@ func newJSONDecoder() -> JSONDecoder {
106106 let decoder = JSONDecoder()
107107 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
108108 let container = try decoder.singleValueContainer()
109- let dateStr = try container.decode(String.self)
109+ let dateStr = try container.decode(String.self).uppercased()
110110
111111 let formatter = DateFormatter()
112112 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/optional-any.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -59,7 +59,7 @@ func newJSONDecoder() -> JSONDecoder {
5959 let decoder = JSONDecoder()
6060 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6161 let container = try decoder.singleValueContainer()
62- let dateStr = try container.decode(String.self)
62+ let dateStr = try container.decode(String.self).uppercased()
6363
6464 let formatter = DateFormatter()
6565 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/optional-const-ref.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -127,7 +127,7 @@ func newJSONDecoder() -> JSONDecoder {
127127 let decoder = JSONDecoder()
128128 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
129129 let container = try decoder.singleValueContainer()
130- let dateStr = try container.decode(String.self)
130+ let dateStr = try container.decode(String.self).uppercased()
131131
132132 let formatter = DateFormatter()
133133 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/optional-constraints.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -71,7 +71,7 @@ func newJSONDecoder() -> JSONDecoder {
7171 let decoder = JSONDecoder()
7272 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
7373 let container = try decoder.singleValueContainer()
74- let dateStr = try container.decode(String.self)
74+ let dateStr = try container.decode(String.self).uppercased()
7575
7676 let formatter = DateFormatter()
7777 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/optional-date-time.schema

4 generated files · +13 −4
Mschema-cplusplusdefault / quicktype.hpp+2 −2
@@ -136,13 +136,13 @@ namespace quicktype {
136136 if (!j.is_object()) throw std::runtime_error("Expected object");
137137 if (j.find("optional-date") != j.end() && j.at("optional-date").is_null()) throw std::runtime_error("Unexpected null");
138138 x.set_optional_date(get_stack_optional<std::string>(j, "optional-date"));
139- if (j.find("optional-date-time") != j.end() && !std::regex_match(j.at("optional-date-time").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
139+ if (j.find("optional-date-time") != j.end() && !std::regex_match(j.at("optional-date-time").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
140140 if (j.find("optional-date-time") != j.end() && j.at("optional-date-time").is_null()) throw std::runtime_error("Unexpected null");
141141 x.set_optional_date_time(get_stack_optional<std::string>(j, "optional-date-time"));
142142 if (j.find("optional-time") != j.end() && j.at("optional-time").is_null()) throw std::runtime_error("Unexpected null");
143143 x.set_optional_time(get_stack_optional<std::string>(j, "optional-time"));
144144 x.set_required_date(j.at("required-date").get<std::string>());
145- if (j.find("required-date-time") != j.end() && !std::regex_match(j.at("required-date-time").get<std::string>(), std::regex("^[0-9]{4}-[0-9]{2}-[0-9]{2}T.*$"))) throw std::runtime_error("Expected date-time");
145+ if (j.find("required-date-time") != j.end() && !std::regex_match(j.at("required-date-time").get<std::string>(), std::regex("^(?:(?:[0-9]{4}-(?:0[13578]|1[02])-(?:0[1-9]|[12][0-9]|3[01]))|(?:[0-9]{4}-(?:0[469]|11)-(?:0[1-9]|[12][0-9]|30))|(?:[0-9]{4}-02-(?:0[1-9]|1[0-9]|2[0-8]))|(?:(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:[02468][048]|[13579][26])00)-02-29))[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:[.][0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$"))) throw std::runtime_error("Expected date-time");
146146 x.set_required_date_time(j.at("required-date-time").get<std::string>());
147147 x.set_required_time(j.at("required-time").get<std::string>());
148148 }
Mschema-objective-cdefault / QTTopLevel.m+2 −1
@@ -82,7 +82,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
8282 {
8383 if (self = [super init]) {
8484 if (![dict[@"required-date"] isKindOfClass:NSString.class]) return nil;
85- if (dict[@"required-date-time"] && [dict[@"required-date-time"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}T" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
85+ if (dict[@"required-date-time"] && [dict[@"required-date-time"] rangeOfString:@"^[0-9]{4}-[0-9]{2}-[0-9]{2}[Tt](?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:[Zz]|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$" options:NSRegularExpressionSearch].location == NSNotFound) return nil;
86+ if (dict[@"required-date-time"] && ![[[[NSISO8601DateFormatter new] stringFromDate:[[NSISO8601DateFormatter new] dateFromString:[[dict[@"required-date-time"] substringToIndex:10] stringByAppendingString:@"T00:00:00Z"]]] substringToIndex:10] isEqualToString:[dict[@"required-date-time"] substringToIndex:10]]) return nil;
8687 if (![dict[@"required-date-time"] isKindOfClass:NSString.class]) return nil;
8788 if (![dict[@"required-time"] isKindOfClass:NSString.class]) return nil;
8889 [self setValuesForKeysWithDictionary:dict];
Mschema-phpdefault / TopLevel.php+8 −0
@@ -93,6 +93,10 @@ class TopLevel {
9393 public static function fromOptionalDateTime(?string $value): ?DateTime {
9494 if (!is_null($value)) {
9595 $tmp = new DateTime($value);
96+ $errors = DateTime::getLastErrors();
97+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
98+ throw new Exception('Invalid date-time');
99+ }
96100 if (!is_a($tmp, 'DateTime')) {
97101 throw new Exception('Attribute Error:TopLevel::');
98102 }
@@ -260,6 +264,10 @@ class TopLevel {
260264 */
261265 public static function fromRequiredDateTime(string $value): DateTime {
262266 $tmp = new DateTime($value);
267+ $errors = DateTime::getLastErrors();
268+ if ($errors && ($errors['warning_count'] || $errors['error_count'])) {
269+ throw new Exception('Invalid date-time');
270+ }
263271 if (!is_a($tmp, 'DateTime')) {
264272 throw new Exception('Attribute Error:TopLevel::');
265273 }
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -75,7 +75,7 @@ func newJSONDecoder() -> JSONDecoder {
7575 let decoder = JSONDecoder()
7676 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
7777 let container = try decoder.singleValueContainer()
78- let dateStr = try container.decode(String.self)
78+ let dateStr = try container.decode(String.self).uppercased()
7979
8080 let formatter = DateFormatter()
8181 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/optional-enum.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -64,7 +64,7 @@ func newJSONDecoder() -> JSONDecoder {
6464 let decoder = JSONDecoder()
6565 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6666 let container = try decoder.singleValueContainer()
67- let dateStr = try container.decode(String.self)
67+ let dateStr = try container.decode(String.self).uppercased()
6868
6969 let formatter = DateFormatter()
7070 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/pattern.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -111,7 +111,7 @@ func newJSONDecoder() -> JSONDecoder {
111111 let decoder = JSONDecoder()
112112 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
113113 let container = try decoder.singleValueContainer()
114- let dateStr = try container.decode(String.self)
114+ let dateStr = try container.decode(String.self).uppercased()
115115
116116 let formatter = DateFormatter()
117117 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/postman-collection.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -108,7 +108,7 @@ func newJSONDecoder() -> JSONDecoder {
108108 let decoder = JSONDecoder()
109109 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
110110 let container = try decoder.singleValueContainer()
111- let dateStr = try container.decode(String.self)
111+ let dateStr = try container.decode(String.self).uppercased()
112112
113113 let formatter = DateFormatter()
114114 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/prefix-items.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -87,7 +87,7 @@ func newJSONDecoder() -> JSONDecoder {
8787 let decoder = JSONDecoder()
8888 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8989 let container = try decoder.singleValueContainer()
90- let dateStr = try container.decode(String.self)
90+ let dateStr = try container.decode(String.self).uppercased()
9191
9292 let formatter = DateFormatter()
9393 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/recursive-union-flattening.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -351,7 +351,7 @@ func newJSONDecoder() -> JSONDecoder {
351351 let decoder = JSONDecoder()
352352 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
353353 let container = try decoder.singleValueContainer()
354- let dateStr = try container.decode(String.self)
354+ let dateStr = try container.decode(String.self).uppercased()
355355
356356 let formatter = DateFormatter()
357357 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/ref-id-files.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -55,7 +55,7 @@ func newJSONDecoder() -> JSONDecoder {
5555 let decoder = JSONDecoder()
5656 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5757 let container = try decoder.singleValueContainer()
58- let dateStr = try container.decode(String.self)
58+ let dateStr = try container.decode(String.self).uppercased()
5959
6060 let formatter = DateFormatter()
6161 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/ref-remote.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -61,7 +61,7 @@ func newJSONDecoder() -> JSONDecoder {
6161 let decoder = JSONDecoder()
6262 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6363 let container = try decoder.singleValueContainer()
64- let dateStr = try container.decode(String.self)
64+ let dateStr = try container.decode(String.self).uppercased()
6565
6666 let formatter = DateFormatter()
6767 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/renaming-bug.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -720,7 +720,7 @@ func newJSONDecoder() -> JSONDecoder {
720720 let decoder = JSONDecoder()
721721 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
722722 let container = try decoder.singleValueContainer()
723- let dateStr = try container.decode(String.self)
723+ let dateStr = try container.decode(String.self).uppercased()
724724
725725 let formatter = DateFormatter()
726726 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/required-draft3.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -55,7 +55,7 @@ func newJSONDecoder() -> JSONDecoder {
5555 let decoder = JSONDecoder()
5656 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5757 let container = try decoder.singleValueContainer()
58- let dateStr = try container.decode(String.self)
58+ let dateStr = try container.decode(String.self).uppercased()
5959
6060 let formatter = DateFormatter()
6161 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/required-non-properties.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -59,7 +59,7 @@ func newJSONDecoder() -> JSONDecoder {
5959 let decoder = JSONDecoder()
6060 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6161 let container = try decoder.singleValueContainer()
62- let dateStr = try container.decode(String.self)
62+ let dateStr = try container.decode(String.self).uppercased()
6363
6464 let formatter = DateFormatter()
6565 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/required.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -55,7 +55,7 @@ func newJSONDecoder() -> JSONDecoder {
5555 let decoder = JSONDecoder()
5656 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5757 let container = try decoder.singleValueContainer()
58- let dateStr = try container.decode(String.self)
58+ let dateStr = try container.decode(String.self).uppercased()
5959
6060 let formatter = DateFormatter()
6161 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/rust-cycle-breaker-union.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -142,7 +142,7 @@ func newJSONDecoder() -> JSONDecoder {
142142 let decoder = JSONDecoder()
143143 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
144144 let container = try decoder.singleValueContainer()
145- let dateStr = try container.decode(String.self)
145+ let dateStr = try container.decode(String.self).uppercased()
146146
147147 let formatter = DateFormatter()
148148 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/schema-constraints.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -59,7 +59,7 @@ func newJSONDecoder() -> JSONDecoder {
5959 let decoder = JSONDecoder()
6060 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6161 let container = try decoder.singleValueContainer()
62- let dateStr = try container.decode(String.self)
62+ let dateStr = try container.decode(String.self).uppercased()
6363
6464 let formatter = DateFormatter()
6565 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/simple-ref.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -61,7 +61,7 @@ func newJSONDecoder() -> JSONDecoder {
6161 let decoder = JSONDecoder()
6262 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6363 let container = try decoder.singleValueContainer()
64- let dateStr = try container.decode(String.self)
64+ let dateStr = try container.decode(String.self).uppercased()
6565
6666 let formatter = DateFormatter()
6767 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/strict-optional.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -55,7 +55,7 @@ func newJSONDecoder() -> JSONDecoder {
5555 let decoder = JSONDecoder()
5656 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5757 let container = try decoder.singleValueContainer()
58- let dateStr = try container.decode(String.self)
58+ let dateStr = try container.decode(String.self).uppercased()
5959
6060 let formatter = DateFormatter()
6161 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/top-level-array.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -86,7 +86,7 @@ func newJSONDecoder() -> JSONDecoder {
8686 let decoder = JSONDecoder()
8787 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8888 let container = try decoder.singleValueContainer()
89- let dateStr = try container.decode(String.self)
89+ let dateStr = try container.decode(String.self).uppercased()
9090
9191 let formatter = DateFormatter()
9292 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/top-level-enum.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -17,7 +17,7 @@ func newJSONDecoder() -> JSONDecoder {
1717 let decoder = JSONDecoder()
1818 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
1919 let container = try decoder.singleValueContainer()
20- let dateStr = try container.decode(String.self)
20+ let dateStr = try container.decode(String.self).uppercased()
2121
2222 let formatter = DateFormatter()
2323 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/top-level-primitive-array.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -37,7 +37,7 @@ func newJSONDecoder() -> JSONDecoder {
3737 let decoder = JSONDecoder()
3838 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
3939 let container = try decoder.singleValueContainer()
40- let dateStr = try container.decode(String.self)
40+ let dateStr = try container.decode(String.self).uppercased()
4141
4242 let formatter = DateFormatter()
4343 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/top-level-primitive.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -12,7 +12,7 @@ func newJSONDecoder() -> JSONDecoder {
1212 let decoder = JSONDecoder()
1313 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
1414 let container = try decoder.singleValueContainer()
15- let dateStr = try container.decode(String.self)
15+ let dateStr = try container.decode(String.self).uppercased()
1616
1717 let formatter = DateFormatter()
1818 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/tuple.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -83,7 +83,7 @@ func newJSONDecoder() -> JSONDecoder {
8383 let decoder = JSONDecoder()
8484 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8585 let container = try decoder.singleValueContainer()
86- let dateStr = try container.decode(String.self)
86+ let dateStr = try container.decode(String.self).uppercased()
8787
8888 let formatter = DateFormatter()
8989 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/unevaluated-properties.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -261,7 +261,7 @@ func newJSONDecoder() -> JSONDecoder {
261261 let decoder = JSONDecoder()
262262 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
263263 let container = try decoder.singleValueContainer()
264- let dateStr = try container.decode(String.self)
264+ let dateStr = try container.decode(String.self).uppercased()
265265
266266 let formatter = DateFormatter()
267267 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/unicode-codepoint-length.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -63,7 +63,7 @@ func newJSONDecoder() -> JSONDecoder {
6363 let decoder = JSONDecoder()
6464 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6565 let container = try decoder.singleValueContainer()
66- let dateStr = try container.decode(String.self)
66+ let dateStr = try container.decode(String.self).uppercased()
6767
6868 let formatter = DateFormatter()
6969 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/union-int-double.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -90,7 +90,7 @@ func newJSONDecoder() -> JSONDecoder {
9090 let decoder = JSONDecoder()
9191 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
9292 let container = try decoder.singleValueContainer()
93- let dateStr = try container.decode(String.self)
93+ let dateStr = try container.decode(String.self).uppercased()
9494
9595 let formatter = DateFormatter()
9696 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/union-list.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -127,7 +127,7 @@ func newJSONDecoder() -> JSONDecoder {
127127 let decoder = JSONDecoder()
128128 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
129129 let container = try decoder.singleValueContainer()
130- let dateStr = try container.decode(String.self)
130+ let dateStr = try container.decode(String.self).uppercased()
131131
132132 let formatter = DateFormatter()
133133 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/union.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -90,7 +90,7 @@ func newJSONDecoder() -> JSONDecoder {
9090 let decoder = JSONDecoder()
9191 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
9292 let container = try decoder.singleValueContainer()
93- let dateStr = try container.decode(String.self)
93+ let dateStr = try container.decode(String.self).uppercased()
9494
9595 let formatter = DateFormatter()
9696 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/uuid.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -107,7 +107,7 @@ func newJSONDecoder() -> JSONDecoder {
107107 let decoder = JSONDecoder()
108108 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
109109 let container = try decoder.singleValueContainer()
110- let dateStr = try container.decode(String.self)
110+ let dateStr = try container.decode(String.self).uppercased()
111111
112112 let formatter = DateFormatter()
113113 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/vega-lite.schema

1 generated file · +1 −1
Mschema-swiftdefault / quicktype.swift+1 −1
@@ -10380,7 +10380,7 @@ func newJSONDecoder() -> JSONDecoder {
1038010380 let decoder = JSONDecoder()
1038110381 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
1038210382 let container = try decoder.singleValueContainer()
10383- let dateStr = try container.decode(String.self)
10383+ let dateStr = try container.decode(String.self).uppercased()
1038410384
1038510385 let formatter = DateFormatter()
1038610386 formatter.calendar = Calendar(identifier: .iso8601)
No generated files match these filters.