Skip to content

Commit 7490199

Browse files
committed
Support datetime.
1 parent c7651f4 commit 7490199

File tree

7 files changed

+83
-22
lines changed

7 files changed

+83
-22
lines changed

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
</PropertyGroup>
3434

3535
<PropertyGroup>
36-
<FacilityVersion>2.10.1</FacilityVersion>
36+
<FacilityVersion>2.11.0</FacilityVersion>
3737
</PropertyGroup>
3838

3939
<ItemGroup>

conformance/ConformanceApi.fsd

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -149,14 +149,13 @@ service ConformanceApi
149149
int32: int32;
150150
int64: int64;
151151
decimal: decimal;
152-
153-
[validate]
154-
enum: Answer;
152+
[validate] enum: Answer;
153+
datetime: datetime;
155154
}:
156155
{
157156
}
158157

159-
[http(method: GET, path: "/checkPath/{string}/{boolean}/{double}/{int32}/{int64}/{decimal}/{enum}")]
158+
[http(method: GET, path: "/checkPath/{string}/{boolean}/{double}/{int32}/{int64}/{decimal}/{enum}/{datetime}")]
160159
method checkPath
161160
{
162161
string: string;
@@ -165,9 +164,8 @@ service ConformanceApi
165164
int32: int32;
166165
int64: int64;
167166
decimal: decimal;
168-
169-
[validate]
170-
enum: Answer;
167+
[validate] enum: Answer;
168+
datetime: datetime;
171169
}:
172170
{
173171
}
@@ -182,6 +180,7 @@ service ConformanceApi
182180
[http(from: header)] int64: int64;
183181
[http(from: header)] decimal: decimal;
184182
[http(from: header)] enum: Answer;
183+
[http(from: header)] datetime: datetime;
185184
}:
186185
{
187186
[http(from: header)] string: string;
@@ -191,6 +190,7 @@ service ConformanceApi
191190
[http(from: header)] int64: int64;
192191
[http(from: header)] decimal: decimal;
193192
[http(from: header)] enum: Answer;
193+
[http(from: header)] datetime: datetime;
194194
}
195195

196196
[http(path: "/mixed/{path}")]
@@ -261,6 +261,7 @@ service ConformanceApi
261261
int32: int32;
262262
int64: int64;
263263
decimal: decimal;
264+
datetime: datetime;
264265
bytes: bytes;
265266
object: object;
266267
error: error;
@@ -280,6 +281,7 @@ service ConformanceApi
280281
int32: int32[];
281282
int64: int64[];
282283
decimal: decimal[];
284+
datetime: datetime[];
283285
bytes: bytes[];
284286
object: object[];
285287
error: error[];
@@ -299,6 +301,7 @@ service ConformanceApi
299301
int32: map<int32>;
300302
int64: map<int64>;
301303
decimal: map<decimal>;
304+
datetime: map<datetime>;
302305
bytes: map<bytes>;
303306
object: map<object>;
304307
error: map<error>;
@@ -318,6 +321,7 @@ service ConformanceApi
318321
int32: result<int32>;
319322
int64: result<int64>;
320323
decimal: result<decimal>;
324+
datetime: result<datetime>;
321325
bytes: result<bytes>;
322326
object: result<object>;
323327
error: result<error>;
@@ -337,6 +341,7 @@ service ConformanceApi
337341
int32: nullable<int32>;
338342
int64: nullable<int64>;
339343
decimal: nullable<decimal>;
344+
datetime: nullable<datetime>;
340345
bytes: nullable<bytes>;
341346
object: nullable<object>;
342347
error: nullable<error>;

conformance/ConformanceTests.json

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
"int32": 42,
1111
"int64": 12345678910,
1212
"decimal": 1.5,
13-
"enum": "yes"
13+
"enum": "yes",
14+
"datetime": "2001-02-03T04:05:06Z"
1415
},
1516
"response": {}
1617
},
@@ -24,7 +25,8 @@
2425
"int32": 42,
2526
"int64": 12345678910,
2627
"decimal": 1.5,
27-
"enum": "yes"
28+
"enum": "yes",
29+
"datetime": "2001-02-03T04:05:06Z"
2830
},
2931
"response": {}
3032
},
@@ -205,6 +207,7 @@
205207
"int32": [42, 24],
206208
"int64": [12345678910, -987654321],
207209
"decimal": [1.5, 6.875],
210+
"datetime": ["2001-02-03T04:05:06Z", "2023-08-10T19:41:21Z"],
208211
"bytes": ["aGk=", ""],
209212
"object": [{ "": null, " ": [null] }, {}],
210213
"error": [{ "code": "code", "message": "message", "innerError": { "code": "code" }, "details": { "": null, " ": [null] } }],
@@ -227,6 +230,7 @@
227230
"int32": [42, 24],
228231
"int64": [12345678910, -987654321],
229232
"decimal": [1.5, 6.875],
233+
"datetime": ["2001-02-03T04:05:06Z", "2023-08-10T19:41:21Z"],
230234
"bytes": ["aGk=", ""],
231235
"object": [{ "": null, " ": [null] }, {}],
232236
"error": [{ "code": "code", "message": "message", "innerError": { "code": "code" }, "details": { "": null, " ": [null] } }],
@@ -252,6 +256,7 @@
252256
"int32": 42,
253257
"int64": 12345678910,
254258
"decimal": 1.5,
259+
"datetime": "2001-02-03T04:05:06Z",
255260
"bytes": "aGk=",
256261
"object": { "": null, " ": [null] },
257262
"error": { "code": "code", "message": "message", "innerError": { "code": "code" }, "details": { "": null, " ": [null] } },
@@ -267,6 +272,7 @@
267272
"int32": 42,
268273
"int64": 12345678910,
269274
"decimal": 1.5,
275+
"datetime": "2001-02-03T04:05:06Z",
270276
"bytes": "aGk=",
271277
"object": { "": null, " ": [null] },
272278
"error": { "code": "code", "message": "message", "innerError": { "code": "code" }, "details": { "": null, " ": [null] } },
@@ -285,7 +291,8 @@
285291
"int32": 42,
286292
"int64": 12345678910,
287293
"decimal": 1.5,
288-
"enum": "yes"
294+
"enum": "yes",
295+
"datetime": "2001-02-03T04:05:06Z"
289296
},
290297
"response": {
291298
"string": "string",
@@ -294,7 +301,8 @@
294301
"int32": 42,
295302
"int64": 12345678910,
296303
"decimal": 1.5,
297-
"enum": "yes"
304+
"enum": "yes",
305+
"datetime": "2001-02-03T04:05:06Z"
298306
}
299307
},
300308
{
@@ -315,6 +323,7 @@
315323
"int32": { "": 42, " ": 24 },
316324
"int64": { "": 12345678910, " ": -987654321 },
317325
"decimal": { "": 1.5, " ": 6.875 },
326+
"datetime": { "": "2001-02-03T04:05:06Z", " ": "2023-08-10T19:41:21Z" },
318327
"bytes": { "": "aGk=", " ": "" },
319328
"object": { "": { "": null, " ": [null] }, " ": {} },
320329
"error": { "": { "code": "code", "message": "message", "innerError": { "code": "code" }, "details": { "": null, " ": [null] } }, " ": {} },
@@ -336,6 +345,7 @@
336345
"int32": { "": 42, " ": 24 },
337346
"int64": { "": 12345678910, " ": -987654321 },
338347
"decimal": { "": 1.5, " ": 6.875 },
348+
"datetime": { "": "2001-02-03T04:05:06Z", " ": "2023-08-10T19:41:21Z" },
339349
"bytes": { "": "aGk=", " ": "" },
340350
"object": { "": { "": null, " ": [null] }, " ": {} },
341351
"error": { "": { "code": "code", "message": "message", "innerError": { "code": "code" }, "details": { "": null, " ": [null] } }, " ": {} },
@@ -361,6 +371,7 @@
361371
"int32": 42,
362372
"int64": 12345678910,
363373
"decimal": 1.5,
374+
"datetime": "2001-02-03T04:05:06Z",
364375
"bytes": "aGk=",
365376
"object": { "": null, " ": [null] },
366377
"error": { "code": "code", "message": "message", "innerError": { "code": "code" }, "details": { "": null, " ": [null] } },
@@ -381,6 +392,7 @@
381392
"int32": 42,
382393
"int64": 12345678910,
383394
"decimal": 1.5,
395+
"datetime": "2001-02-03T04:05:06Z",
384396
"bytes": "aGk=",
385397
"object": { "": null, " ": [null] },
386398
"error": { "code": "code", "message": "message", "innerError": { "code": "code" }, "details": { "": null, " ": [null] } },
@@ -421,6 +433,7 @@
421433
"int32": null,
422434
"int64": null,
423435
"decimal": null,
436+
"datetime": null,
424437
"bytes": null,
425438
"object": null,
426439
"error": null,
@@ -441,6 +454,7 @@
441454
"int32": null,
442455
"int64": null,
443456
"decimal": null,
457+
"datetime": null,
444458
"bytes": null,
445459
"object": null,
446460
"error": null,
@@ -465,6 +479,7 @@
465479
"int32": { "error": { "code": "code", "message": "message", "innerError": { "code": "code" }, "details": { "": null, " ": [null] } } },
466480
"int64": { "error": { "code": "code", "message": "message", "innerError": { "code": "code" }, "details": { "": null, " ": [null] } } },
467481
"decimal": { "error": { "code": "code", "message": "message", "innerError": { "code": "code" }, "details": { "": null, " ": [null] } } },
482+
"datetime": { "error": { "code": "code", "message": "message", "innerError": { "code": "code" }, "details": { "": null, " ": [null] } } },
468483
"bytes": { "error": { "code": "code", "message": "message", "innerError": { "code": "code" }, "details": { "": null, " ": [null] } } },
469484
"object": { "error": { "code": "code", "message": "message", "innerError": { "code": "code" }, "details": { "": null, " ": [null] } } },
470485
"error": { "error": { "code": "code", "message": "message", "innerError": { "code": "code" }, "details": { "": null, " ": [null] } } },
@@ -485,6 +500,7 @@
485500
"int32": { "error": { "code": "code", "message": "message", "innerError": { "code": "code" }, "details": { "": null, " ": [null] } } },
486501
"int64": { "error": { "code": "code", "message": "message", "innerError": { "code": "code" }, "details": { "": null, " ": [null] } } },
487502
"decimal": { "error": { "code": "code", "message": "message", "innerError": { "code": "code" }, "details": { "": null, " ": [null] } } },
503+
"datetime": { "error": { "code": "code", "message": "message", "innerError": { "code": "code" }, "details": { "": null, " ": [null] } } },
488504
"bytes": { "error": { "code": "code", "message": "message", "innerError": { "code": "code" }, "details": { "": null, " ": [null] } } },
489505
"object": { "error": { "code": "code", "message": "message", "innerError": { "code": "code" }, "details": { "": null, " ": [null] } } },
490506
"error": { "error": { "code": "code", "message": "message", "innerError": { "code": "code" }, "details": { "": null, " ": [null] } } },
@@ -509,6 +525,7 @@
509525
"int32": { "value": 42 },
510526
"int64": { "value": 12345678910 },
511527
"decimal": { "value": 1.5 },
528+
"datetime": { "value": "2001-02-03T04:05:06Z" },
512529
"bytes": { "value": "aGk=" },
513530
"object": { "value": { "": null, " ": [null] } },
514531
"error": { "value": { "code": "code", "message": "message", "innerError": { "code": "code" }, "details": { "": null, " ": [null] } } },
@@ -530,6 +547,7 @@
530547
"int32": { "value": 42 },
531548
"int64": { "value": 12345678910 },
532549
"decimal": { "value": 1.5 },
550+
"datetime": { "value": "2001-02-03T04:05:06Z" },
533551
"bytes": { "value": "aGk=" },
534552
"object": { "value": { "": null, " ": [null] } },
535553
"error": { "value": { "code": "code", "message": "message", "innerError": { "code": "code" }, "details": { "": null, " ": [null] } } },
@@ -767,7 +785,7 @@
767785
"method": "checkPath",
768786
"httpRequest": {
769787
"method": "GET",
770-
"path": "/CHECKPATH/pathCase/true/1.5/3/4/0.625/yes"
788+
"path": "/CHECKPATH/pathCase/true/1.5/3/4/0.625/yes/2001-02-03T04:05:06Z"
771789
},
772790
"request": {
773791
"string": "pathCase",
@@ -776,7 +794,8 @@
776794
"int32": 3,
777795
"int64": 4,
778796
"decimal": 0.625,
779-
"enum": "yes"
797+
"enum": "yes",
798+
"datetime": "2001-02-03T04:05:06Z"
780799
},
781800
"response": {}
782801
},
@@ -785,7 +804,7 @@
785804
"method": "checkPath",
786805
"httpRequest": {
787806
"method": "GET",
788-
"path": "/checkPath/booleanCase/TRUE/1.5/3/4/0.625/yes"
807+
"path": "/checkPath/booleanCase/TRUE/1.5/3/4/0.625/yes/2001-02-03T04:05:06Z"
789808
},
790809
"request": {
791810
"string": "booleanCase",
@@ -794,7 +813,8 @@
794813
"int32": 3,
795814
"int64": 4,
796815
"decimal": 0.625,
797-
"enum": "yes"
816+
"enum": "yes",
817+
"datetime": "2001-02-03T04:05:06Z"
798818
},
799819
"response": {}
800820
},
@@ -803,7 +823,7 @@
803823
"method": "checkQuery",
804824
"httpRequest": {
805825
"method": "GET",
806-
"path": "/CHECKQUERY?string=pathCase&boolean=true&double=1.5&int32=3&int64=4&decimal=0.625&enum=yes"
826+
"path": "/CHECKQUERY?string=pathCase&boolean=true&double=1.5&int32=3&int64=4&decimal=0.625&enum=yes&datetime=2001-02-03T04:05:06Z"
807827
},
808828
"request": {
809829
"string": "pathCase",
@@ -812,7 +832,8 @@
812832
"int32": 3,
813833
"int64": 4,
814834
"decimal": 0.625,
815-
"enum": "yes"
835+
"enum": "yes",
836+
"datetime": "2001-02-03T04:05:06Z"
816837
},
817838
"response": {}
818839
},
@@ -821,7 +842,7 @@
821842
"method": "checkQuery",
822843
"httpRequest": {
823844
"method": "GET",
824-
"path": "/checkQuery?STRING=queryCase&boolean=true&double=1.5&int32=3&int64=4&decimal=0.625&enum=yes"
845+
"path": "/checkQuery?STRING=queryCase&boolean=true&double=1.5&int32=3&int64=4&decimal=0.625&enum=yes&datetime=2001-02-03T04:05:06Z"
825846
},
826847
"request": {
827848
"string": "queryCase",
@@ -830,7 +851,8 @@
830851
"int32": 3,
831852
"int64": 4,
832853
"decimal": 0.625,
833-
"enum": "yes"
854+
"enum": "yes",
855+
"datetime": "2001-02-03T04:05:06Z"
834856
},
835857
"response": {}
836858
},

conformance/ts/src/conformanceApi.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,7 @@ class ConformanceApiHttpClient implements IConformanceApi {
259259
request.int64 == null || query.push('int64=' + request.int64.toString());
260260
request.decimal == null || query.push('decimal=' + request.decimal.toString());
261261
request.enum == null || query.push('enum=' + request.enum);
262+
request.datetime == null || query.push('datetime=' + encodeURIComponent(request.datetime));
262263
if (query.length) {
263264
uri = uri + '?' + query.join('&');
264265
}
@@ -308,7 +309,11 @@ class ConformanceApiHttpClient implements IConformanceApi {
308309
if (!uriPartEnum) {
309310
return Promise.resolve(createRequiredRequestFieldError('enum'));
310311
}
311-
const uri = `checkPath/${uriPartString}/${uriPartBoolean}/${uriPartDouble}/${uriPartInt32}/${uriPartInt64}/${uriPartDecimal}/${uriPartEnum}`;
312+
const uriPartDatetime = request.datetime != null && encodeURIComponent(request.datetime);
313+
if (!uriPartDatetime) {
314+
return Promise.resolve(createRequiredRequestFieldError('datetime'));
315+
}
316+
const uri = `checkPath/${uriPartString}/${uriPartBoolean}/${uriPartDouble}/${uriPartInt32}/${uriPartInt64}/${uriPartDecimal}/${uriPartEnum}/${uriPartDatetime}`;
312317
const fetchRequest: IFetchRequest = {
313318
method: 'GET',
314319
};
@@ -353,6 +358,9 @@ class ConformanceApiHttpClient implements IConformanceApi {
353358
if (request.enum != null) {
354359
fetchRequest.headers!['enum'] = request.enum;
355360
}
361+
if (request.datetime != null) {
362+
fetchRequest.headers!['datetime'] = request.datetime;
363+
}
356364
return fetchResponse(this._fetch, this._baseUri + uri, fetchRequest, context)
357365
.then(result => {
358366
const status = result.response.status;
@@ -392,6 +400,10 @@ class ConformanceApiHttpClient implements IConformanceApi {
392400
if (headerValue != null) {
393401
value.enum = headerValue as Answer;
394402
}
403+
headerValue = result.response.headers.get('datetime');
404+
if (headerValue != null) {
405+
value.datetime = headerValue;
406+
}
395407
return { value: value };
396408
});
397409
}

0 commit comments

Comments
 (0)