@azure-tools/typespec-go 0.5.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/codegen.go/src/example.js +75 -75
- package/dist/codegen.go/src/example.js.map +1 -1
- package/dist/codegen.go/src/fake/factory.d.ts.map +1 -1
- package/dist/codegen.go/src/fake/factory.js +29 -24
- package/dist/codegen.go/src/fake/factory.js.map +1 -1
- package/dist/codegen.go/src/fake/servers.js +106 -98
- package/dist/codegen.go/src/fake/servers.js.map +1 -1
- package/dist/codegen.go/src/helpers.d.ts +57 -4
- package/dist/codegen.go/src/helpers.d.ts.map +1 -1
- package/dist/codegen.go/src/helpers.js +200 -128
- package/dist/codegen.go/src/helpers.js.map +1 -1
- package/dist/codegen.go/src/imports.d.ts +1 -1
- package/dist/codegen.go/src/imports.d.ts.map +1 -1
- package/dist/codegen.go/src/imports.js +13 -12
- package/dist/codegen.go/src/imports.js.map +1 -1
- package/dist/codegen.go/src/interfaces.js +2 -2
- package/dist/codegen.go/src/interfaces.js.map +1 -1
- package/dist/codegen.go/src/models.d.ts.map +1 -1
- package/dist/codegen.go/src/models.js +81 -81
- package/dist/codegen.go/src/models.js.map +1 -1
- package/dist/codegen.go/src/operations.d.ts.map +1 -1
- package/dist/codegen.go/src/operations.js +100 -113
- package/dist/codegen.go/src/operations.js.map +1 -1
- package/dist/codegen.go/src/options.js +2 -2
- package/dist/codegen.go/src/options.js.map +1 -1
- package/dist/codegen.go/src/polymorphics.d.ts.map +1 -1
- package/dist/codegen.go/src/polymorphics.js +29 -24
- package/dist/codegen.go/src/polymorphics.js.map +1 -1
- package/dist/codegen.go/src/responses.js +2 -2
- package/dist/codegen.go/src/responses.js.map +1 -1
- package/dist/codegen.go/src/time.js +13 -14
- package/dist/codegen.go/src/time.js.map +1 -1
- package/dist/codegen.go/src/xmlAdditionalProps.js +1 -2
- package/dist/codegen.go/src/xmlAdditionalProps.js.map +1 -1
- package/dist/codemodel.go/src/examples.d.ts +20 -20
- package/dist/codemodel.go/src/examples.d.ts.map +1 -1
- package/dist/codemodel.go/src/examples.js +2 -2
- package/dist/codemodel.go/src/examples.js.map +1 -1
- package/dist/codemodel.go/src/package.d.ts +4 -4
- package/dist/codemodel.go/src/package.d.ts.map +1 -1
- package/dist/codemodel.go/src/package.js +3 -3
- package/dist/codemodel.go/src/package.js.map +1 -1
- package/dist/codemodel.go/src/param.d.ts +32 -24
- package/dist/codemodel.go/src/param.d.ts.map +1 -1
- package/dist/codemodel.go/src/param.js +54 -1
- package/dist/codemodel.go/src/param.js.map +1 -1
- package/dist/codemodel.go/src/result.d.ts +12 -10
- package/dist/codemodel.go/src/result.d.ts.map +1 -1
- package/dist/codemodel.go/src/result.js +21 -4
- package/dist/codemodel.go/src/result.js.map +1 -1
- package/dist/codemodel.go/src/type.d.ts +219 -86
- package/dist/codemodel.go/src/type.d.ts.map +1 -1
- package/dist/codemodel.go/src/type.js +137 -127
- package/dist/codemodel.go/src/type.js.map +1 -1
- package/dist/typespec-go/src/emitter.d.ts.map +1 -1
- package/dist/typespec-go/src/emitter.js +80 -0
- package/dist/typespec-go/src/emitter.js.map +1 -1
- package/dist/typespec-go/src/lib.d.ts +1 -0
- package/dist/typespec-go/src/lib.d.ts.map +1 -1
- package/dist/typespec-go/src/lib.js +5 -0
- package/dist/typespec-go/src/lib.js.map +1 -1
- package/dist/typespec-go/src/tcgcadapter/adapter.js +5 -0
- package/dist/typespec-go/src/tcgcadapter/adapter.js.map +1 -1
- package/dist/typespec-go/src/tcgcadapter/clients.d.ts.map +1 -1
- package/dist/typespec-go/src/tcgcadapter/clients.js +71 -58
- package/dist/typespec-go/src/tcgcadapter/clients.js.map +1 -1
- package/dist/typespec-go/src/tcgcadapter/types.d.ts +3 -3
- package/dist/typespec-go/src/tcgcadapter/types.d.ts.map +1 -1
- package/dist/typespec-go/src/tcgcadapter/types.js +47 -46
- package/dist/typespec-go/src/tcgcadapter/types.js.map +1 -1
- package/package.json +5 -5
|
@@ -335,11 +335,11 @@ function generateServerTransportMethods(codeModel, serverTransport, finalMethods
|
|
|
335
335
|
content += '\t})\n';
|
|
336
336
|
}
|
|
337
337
|
else if (method.responseEnvelope.result.kind === 'monomorphicResult') {
|
|
338
|
-
if (
|
|
338
|
+
if (method.responseEnvelope.result.monomorphicType.kind === 'encodedBytes') {
|
|
339
339
|
const encoding = method.responseEnvelope.result.monomorphicType.encoding;
|
|
340
340
|
content += `\tresp, err := server.MarshalResponseAsByteArray(respContent, server.GetResponse(respr).${getResultFieldName(method.responseEnvelope.result)}, runtime.Base64${encoding}Format, req)\n`;
|
|
341
341
|
}
|
|
342
|
-
else if (
|
|
342
|
+
else if (method.responseEnvelope.result.monomorphicType.kind === 'rawJSON') {
|
|
343
343
|
imports.add('bytes');
|
|
344
344
|
imports.add('io');
|
|
345
345
|
content += '\tresp, err := server.NewResponse(respContent, req, &server.ResponseOptions{\n';
|
|
@@ -348,13 +348,13 @@ function generateServerTransportMethods(codeModel, serverTransport, finalMethods
|
|
|
348
348
|
}
|
|
349
349
|
else {
|
|
350
350
|
let respField = `.${getResultFieldName(method.responseEnvelope.result)}`;
|
|
351
|
-
if (method.responseEnvelope.result.format === 'XML' &&
|
|
351
|
+
if (method.responseEnvelope.result.format === 'XML' && method.responseEnvelope.result.monomorphicType.kind === 'slice') {
|
|
352
352
|
// for XML array responses we use the response type directly as it has the necessary XML tag for proper marshalling
|
|
353
353
|
respField = '';
|
|
354
354
|
}
|
|
355
355
|
let responseField = `server.GetResponse(respr)${respField}`;
|
|
356
|
-
if (
|
|
357
|
-
responseField = `(*${method.responseEnvelope.result.monomorphicType.
|
|
356
|
+
if (method.responseEnvelope.result.monomorphicType.kind === 'time') {
|
|
357
|
+
responseField = `(*${method.responseEnvelope.result.monomorphicType.format})(${responseField})`;
|
|
358
358
|
}
|
|
359
359
|
content += `\tresp, err := server.MarshalResponseAs${method.responseEnvelope.result.format}(respContent, ${responseField}, req)\n`;
|
|
360
360
|
}
|
|
@@ -421,29 +421,31 @@ function dispatchForOperationBody(clientPkg, receiverName, method, imports) {
|
|
|
421
421
|
case 'XML':
|
|
422
422
|
if (bodyParam && !go.isLiteralParameter(bodyParam)) {
|
|
423
423
|
imports.add('github.com/Azure/azure-sdk-for-go/sdk/azcore/fake', 'azfake');
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
424
|
+
switch (bodyParam.type.kind) {
|
|
425
|
+
case 'encodedBytes':
|
|
426
|
+
content += `\tbody, err := server.UnmarshalRequestAsByteArray(req, runtime.Base64${bodyParam.type.encoding}Format)\n`;
|
|
427
|
+
content += '\tif err != nil {\n\t\treturn nil, err\n\t}\n';
|
|
428
|
+
break;
|
|
429
|
+
case 'interface':
|
|
430
|
+
requiredHelpers.readRequestBody = true;
|
|
431
|
+
content += '\traw, err := readRequestBody(req)\n';
|
|
432
|
+
content += '\tif err != nil {\n\t\treturn nil, err\n\t}\n';
|
|
433
|
+
content += `\tbody, err := unmarshal${bodyParam.type.name}(raw)\n`;
|
|
434
|
+
content += '\tif err != nil {\n\t\treturn nil, err\n\t}\n';
|
|
435
|
+
break;
|
|
436
|
+
case 'rawJSON':
|
|
437
|
+
content += '\tbody, err := io.ReadAll(req.Body)\n';
|
|
438
|
+
content += '\tif err != nil {\n\t\treturn nil, err\n\t}\n';
|
|
439
|
+
content += '\treq.Body.Close()\n';
|
|
440
|
+
break;
|
|
441
|
+
default: {
|
|
442
|
+
let bodyTypeName = go.getTypeDeclaration(bodyParam.type, clientPkg);
|
|
443
|
+
if (bodyParam.type.kind === 'time') {
|
|
444
|
+
bodyTypeName = bodyParam.type.format;
|
|
445
|
+
}
|
|
446
|
+
content += `\tbody, err := server.UnmarshalRequestAs${bodyParam.bodyFormat}[${bodyTypeName}](req)\n`;
|
|
447
|
+
content += '\tif err != nil {\n\t\treturn nil, err\n\t}\n';
|
|
444
448
|
}
|
|
445
|
-
content += `\tbody, err := server.UnmarshalRequestAs${bodyParam.bodyFormat}[${bodyTypeName}](req)\n`;
|
|
446
|
-
content += '\tif err != nil {\n\t\treturn nil, err\n\t}\n';
|
|
447
449
|
}
|
|
448
450
|
}
|
|
449
451
|
break;
|
|
@@ -466,8 +468,12 @@ function dispatchForOperationBody(clientPkg, receiverName, method, imports) {
|
|
|
466
468
|
content += '\treader := multipart.NewReader(req.Body, params["boundary"])\n';
|
|
467
469
|
for (const param of multipartBodyParams) {
|
|
468
470
|
let pkgPrefix = '';
|
|
469
|
-
|
|
470
|
-
|
|
471
|
+
switch (param.type.kind) {
|
|
472
|
+
case 'constant':
|
|
473
|
+
case 'model':
|
|
474
|
+
case 'polymorphicModel':
|
|
475
|
+
pkgPrefix = clientPkg + '.';
|
|
476
|
+
break;
|
|
471
477
|
}
|
|
472
478
|
content += `\tvar ${param.name} ${pkgPrefix}${go.getTypeDeclaration(param.type)}\n`;
|
|
473
479
|
}
|
|
@@ -515,23 +521,26 @@ function dispatchForOperationBody(clientPkg, receiverName, method, imports) {
|
|
|
515
521
|
};
|
|
516
522
|
const isMultipartContentType = function (type) {
|
|
517
523
|
type = helpers.recursiveUnwrapMapSlice(type);
|
|
518
|
-
return (
|
|
524
|
+
return (type.kind === 'qualifiedType' && type.exportName === 'MultipartContent');
|
|
525
|
+
};
|
|
526
|
+
const isModelType = function (type) {
|
|
527
|
+
return type.kind === 'model' || type.kind === 'polymorphicModel';
|
|
519
528
|
};
|
|
520
529
|
const emitCase = function (caseValue, paramVar, type) {
|
|
521
530
|
let caseContent = `\t\tcase "${caseValue}":\n`;
|
|
522
531
|
caseContent += '\t\t\tcontent, err = io.ReadAll(part)\n';
|
|
523
532
|
caseContent += '\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n';
|
|
524
533
|
let assignedValue;
|
|
525
|
-
if (
|
|
534
|
+
if (isModelType(helpers.recursiveUnwrapMapSlice(type))) {
|
|
526
535
|
imports.add('encoding/json');
|
|
527
536
|
caseContent += `\t\t\tif err = json.Unmarshal(content, &${paramVar}); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n`;
|
|
528
537
|
}
|
|
529
|
-
else if (
|
|
538
|
+
else if (type.kind === 'qualifiedType' && type.exportName === 'ReadSeekCloser') {
|
|
530
539
|
imports.add('bytes');
|
|
531
540
|
imports.add('github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming');
|
|
532
541
|
assignedValue = 'streaming.NopCloser(bytes.NewReader(content))';
|
|
533
542
|
}
|
|
534
|
-
else if (
|
|
543
|
+
else if (type.kind === 'constant') {
|
|
535
544
|
let from;
|
|
536
545
|
switch (type.type) {
|
|
537
546
|
case 'bool':
|
|
@@ -548,12 +557,12 @@ function dispatchForOperationBody(clientPkg, receiverName, method, imports) {
|
|
|
548
557
|
}
|
|
549
558
|
assignedValue = `${clientPkg}.${type.name}(${from})`;
|
|
550
559
|
}
|
|
551
|
-
else if (
|
|
552
|
-
switch (type.
|
|
560
|
+
else if (type.kind === 'scalar') {
|
|
561
|
+
switch (type.type) {
|
|
553
562
|
case 'bool':
|
|
554
563
|
imports.add('strconv');
|
|
555
564
|
// ParseBool happens in place, so no need to set assignedValue
|
|
556
|
-
caseContent += parsePrimitiveType(type.
|
|
565
|
+
caseContent += parsePrimitiveType(type.type, paramVar);
|
|
557
566
|
break;
|
|
558
567
|
case 'float32':
|
|
559
568
|
case 'float64':
|
|
@@ -561,23 +570,23 @@ function dispatchForOperationBody(clientPkg, receiverName, method, imports) {
|
|
|
561
570
|
case 'int16':
|
|
562
571
|
case 'int32':
|
|
563
572
|
case 'int64':
|
|
564
|
-
caseContent += parsePrimitiveType(type.
|
|
565
|
-
assignedValue = `${type.
|
|
566
|
-
break;
|
|
567
|
-
case 'string':
|
|
568
|
-
assignedValue = 'string(content)';
|
|
573
|
+
caseContent += parsePrimitiveType(type.type);
|
|
574
|
+
assignedValue = `${type.type}(parsed)`;
|
|
569
575
|
break;
|
|
570
576
|
default:
|
|
571
|
-
throw new CodegenError('InternalError', `unhandled multipart parameter primitive type ${type.
|
|
577
|
+
throw new CodegenError('InternalError', `unhandled multipart parameter primitive type ${type.type}`);
|
|
572
578
|
}
|
|
573
579
|
}
|
|
580
|
+
else if (type.kind === 'string') {
|
|
581
|
+
assignedValue = 'string(content)';
|
|
582
|
+
}
|
|
574
583
|
else if (isMultipartContentType(type)) {
|
|
575
584
|
imports.add('bytes');
|
|
576
585
|
imports.add('github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming');
|
|
577
586
|
const bodyContent = 'streaming.NopCloser(bytes.NewReader(content))';
|
|
578
587
|
const contentType = 'part.Header.Get("Content-Type")';
|
|
579
588
|
const filename = 'part.FileName()';
|
|
580
|
-
if (
|
|
589
|
+
if (type.kind === 'slice') {
|
|
581
590
|
caseContent += `\t\t\t${paramVar} = append(${paramVar}, streaming.MultipartContent{\n`;
|
|
582
591
|
caseContent += `\t\t\t\tBody: ${bodyContent},\n`;
|
|
583
592
|
caseContent += `\t\t\t\tContentType: ${contentType},\n`;
|
|
@@ -590,18 +599,18 @@ function dispatchForOperationBody(clientPkg, receiverName, method, imports) {
|
|
|
590
599
|
caseContent += `\t\t\t${paramVar}.Filename = ${filename}\n`;
|
|
591
600
|
}
|
|
592
601
|
}
|
|
593
|
-
else if (
|
|
594
|
-
if (
|
|
602
|
+
else if (type.kind === 'slice') {
|
|
603
|
+
if (type.elementType.kind === 'qualifiedType' && type.elementType.exportName === 'ReadSeekCloser') {
|
|
595
604
|
imports.add('bytes');
|
|
596
605
|
imports.add('github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming');
|
|
597
606
|
assignedValue = `append(${paramVar}, streaming.NopCloser(bytes.NewReader(content)))`;
|
|
598
607
|
}
|
|
599
608
|
else {
|
|
600
|
-
throw new CodegenError('InternalError', `uhandled multipart parameter array element
|
|
609
|
+
throw new CodegenError('InternalError', `uhandled multipart parameter array element kind ${type.elementType.kind}`);
|
|
601
610
|
}
|
|
602
611
|
}
|
|
603
612
|
else {
|
|
604
|
-
throw new CodegenError('InternalError', `uhandled multipart parameter
|
|
613
|
+
throw new CodegenError('InternalError', `uhandled multipart parameter kind ${type.kind}`);
|
|
605
614
|
}
|
|
606
615
|
if (assignedValue) {
|
|
607
616
|
caseContent += `\t\t\t${paramVar} = ${assignedValue}\n`;
|
|
@@ -609,7 +618,7 @@ function dispatchForOperationBody(clientPkg, receiverName, method, imports) {
|
|
|
609
618
|
return caseContent;
|
|
610
619
|
};
|
|
611
620
|
for (const param of multipartBodyParams) {
|
|
612
|
-
if (
|
|
621
|
+
if (isModelType(param.type)) {
|
|
613
622
|
for (const field of param.type.fields) {
|
|
614
623
|
content += emitCase(field.serializedName, `${param.name}.${field.name}`, field.type);
|
|
615
624
|
}
|
|
@@ -625,7 +634,7 @@ function dispatchForOperationBody(clientPkg, receiverName, method, imports) {
|
|
|
625
634
|
else if (formBodyParams.length > 0) {
|
|
626
635
|
for (const param of formBodyParams) {
|
|
627
636
|
let pkgPrefix = '';
|
|
628
|
-
if (
|
|
637
|
+
if (param.type.kind === 'constant') {
|
|
629
638
|
pkgPrefix = clientPkg + '.';
|
|
630
639
|
}
|
|
631
640
|
content += `\tvar ${param.name} ${pkgPrefix}${go.getTypeDeclaration(param.type)}\n`;
|
|
@@ -636,14 +645,15 @@ function dispatchForOperationBody(clientPkg, receiverName, method, imports) {
|
|
|
636
645
|
for (const param of formBodyParams) {
|
|
637
646
|
content += `\t\tcase "${param.formDataName}":\n`;
|
|
638
647
|
let assignedValue;
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
648
|
+
switch (param.type.kind) {
|
|
649
|
+
case 'constant':
|
|
650
|
+
assignedValue = `${go.getTypeDeclaration(param.type, clientPkg)}(req.FormValue(key))`;
|
|
651
|
+
break;
|
|
652
|
+
case 'string':
|
|
653
|
+
assignedValue = 'req.FormValue(key)';
|
|
654
|
+
break;
|
|
655
|
+
default:
|
|
656
|
+
throw new CodegenError('InternalError', `uhandled form parameter kind ${param.type.kind}`);
|
|
647
657
|
}
|
|
648
658
|
content += `\t\t\t${param.name} = ${assignedValue}\n`;
|
|
649
659
|
}
|
|
@@ -833,7 +843,7 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
833
843
|
const escapedParam = createLocalVariableName(param, 'Escaped');
|
|
834
844
|
content += `\t${escapedParam} := ${paramValue}\n`;
|
|
835
845
|
let paramVar = createLocalVariableName(param, 'Unescaped');
|
|
836
|
-
if (
|
|
846
|
+
if (param.type.elementType.kind === 'string') {
|
|
837
847
|
// by convention, if the value is in its "final form" (i.e. no parsing required)
|
|
838
848
|
// then its var is to have the "Param" suffix. the only case is string, everything
|
|
839
849
|
// else requires some amount of parsing/conversion.
|
|
@@ -856,7 +866,7 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
856
866
|
where = 'Query';
|
|
857
867
|
}
|
|
858
868
|
let paramVar = createLocalVariableName(param, 'Unescaped');
|
|
859
|
-
if (go.isRequiredParameter(param) &&
|
|
869
|
+
if (go.isRequiredParameter(param) && param.type.kind === 'constant' && param.type.type === 'string') {
|
|
860
870
|
// for string-based enums, we perform the conversion as part of unescaping
|
|
861
871
|
requiredHelpers.parseWithCast = true;
|
|
862
872
|
paramVar = createLocalVariableName(param, 'Param');
|
|
@@ -867,8 +877,7 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
867
877
|
}
|
|
868
878
|
else {
|
|
869
879
|
if (go.isRequiredParameter(param) &&
|
|
870
|
-
(
|
|
871
|
-
(go.isSliceType(param.type) && go.isPrimitiveType(param.type.elementType) && param.type.elementType.typeName === 'string'))) {
|
|
880
|
+
(param.type.kind === 'string' || (param.type.kind === 'slice' && param.type.elementType.kind === 'string'))) {
|
|
872
881
|
// by convention, if the value is in its "final form" (i.e. no parsing required)
|
|
873
882
|
// then its var is to have the "Param" suffix. the only case is string, everything
|
|
874
883
|
// else requires some amount of parsing/conversion.
|
|
@@ -882,7 +891,7 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
882
891
|
// parse params as required
|
|
883
892
|
if (param.kind === 'headerCollectionParam' || param.kind === 'pathCollectionParam' || param.kind === 'queryCollectionParam') {
|
|
884
893
|
// any element type other than string will require some form of conversion/parsing
|
|
885
|
-
if (
|
|
894
|
+
if (param.type.elementType.kind !== 'string') {
|
|
886
895
|
if (param.collectionFormat !== 'multi') {
|
|
887
896
|
requiredHelpers.splitHelper = true;
|
|
888
897
|
const elementsParam = createLocalVariableName(param, 'Elements');
|
|
@@ -891,23 +900,22 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
891
900
|
}
|
|
892
901
|
const paramVar = createLocalVariableName(param, 'Param');
|
|
893
902
|
let elementFormat;
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
throw new CodegenError('InternalError', `unhandled element type ${go.getTypeDeclaration(param.type.elementType)}`);
|
|
903
|
+
switch (param.type.elementType.kind) {
|
|
904
|
+
case 'constant':
|
|
905
|
+
case 'scalar':
|
|
906
|
+
elementFormat = param.type.elementType.type;
|
|
907
|
+
break;
|
|
908
|
+
case 'encodedBytes':
|
|
909
|
+
elementFormat = param.type.elementType.encoding;
|
|
910
|
+
break;
|
|
911
|
+
case 'time':
|
|
912
|
+
elementFormat = param.type.elementType.format;
|
|
913
|
+
break;
|
|
914
|
+
default:
|
|
915
|
+
throw new CodegenError('InternalError', `unhandled element kind ${param.type.elementType.kind}`);
|
|
908
916
|
}
|
|
909
917
|
let toType = go.getTypeDeclaration(param.type.elementType);
|
|
910
|
-
if (
|
|
918
|
+
if (param.type.elementType.kind === 'constant') {
|
|
911
919
|
toType = `${clientPkg}.${toType}`;
|
|
912
920
|
}
|
|
913
921
|
content += `\t${paramVar} := make([]${toType}, len(${paramValue}))\n`;
|
|
@@ -968,7 +976,7 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
968
976
|
content += `\t${createLocalVariableName(param, 'Param')} := splitHelper(${paramValue}, "${helpers.getDelimiterForCollectionFormat(param.collectionFormat)}")\n`;
|
|
969
977
|
}
|
|
970
978
|
}
|
|
971
|
-
else if (
|
|
979
|
+
else if (param.type.kind === 'scalar' && param.type.type === 'bool') {
|
|
972
980
|
imports.add('strconv');
|
|
973
981
|
let from = `strconv.ParseBool(${paramValue})`;
|
|
974
982
|
if (!go.isRequiredParameter(param)) {
|
|
@@ -978,16 +986,16 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
978
986
|
content += `\t${createLocalVariableName(param, 'Param')}, err := ${from}\n`;
|
|
979
987
|
content += '\tif err != nil {\n\t\treturn nil, err\n\t}\n';
|
|
980
988
|
}
|
|
981
|
-
else if (
|
|
989
|
+
else if (param.type.kind === 'encodedBytes') {
|
|
982
990
|
imports.add('encoding/base64');
|
|
983
991
|
content += `\t${createLocalVariableName(param, 'Param')}, err := base64.${param.type.encoding}Encoding.DecodeString(${paramValue})\n`;
|
|
984
992
|
content += '\tif err != nil {\n\t\treturn nil, err\n\t}\n';
|
|
985
993
|
}
|
|
986
|
-
else if (
|
|
987
|
-
if (param.type.
|
|
994
|
+
else if (param.type.kind === 'time') {
|
|
995
|
+
if (param.type.format === 'dateType' || param.type.format === 'timeRFC3339') {
|
|
988
996
|
imports.add('time');
|
|
989
997
|
let format = helpers.dateFormat;
|
|
990
|
-
if (param.type.
|
|
998
|
+
if (param.type.format === 'timeRFC3339') {
|
|
991
999
|
format = helpers.timeRFC3339Format;
|
|
992
1000
|
}
|
|
993
1001
|
let from = `time.Parse("${format}", ${paramValue})`;
|
|
@@ -998,10 +1006,10 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
998
1006
|
content += `\t${createLocalVariableName(param, 'Param')}, err := ${from}\n`;
|
|
999
1007
|
content += '\tif err != nil {\n\t\treturn nil, err\n\t}\n';
|
|
1000
1008
|
}
|
|
1001
|
-
else if (param.type.
|
|
1009
|
+
else if (param.type.format === 'dateTimeRFC1123' || param.type.format === 'dateTimeRFC3339') {
|
|
1002
1010
|
imports.add('time');
|
|
1003
1011
|
let format = 'time.RFC3339Nano';
|
|
1004
|
-
if (param.type.
|
|
1012
|
+
if (param.type.format === 'dateTimeRFC1123') {
|
|
1005
1013
|
format = 'time.RFC1123';
|
|
1006
1014
|
}
|
|
1007
1015
|
let from = `time.Parse(${format}, ${paramValue})`;
|
|
@@ -1030,7 +1038,7 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
1030
1038
|
content += '\tif err != nil {\n\t\treturn nil, err\n\t}\n';
|
|
1031
1039
|
}
|
|
1032
1040
|
}
|
|
1033
|
-
else if (
|
|
1041
|
+
else if (param.type.kind === 'scalar' && (param.type.type === 'float32' || param.type.type === 'float64' || param.type.type === 'int32' || param.type.type === 'int64')) {
|
|
1034
1042
|
let parser;
|
|
1035
1043
|
if (!go.isRequiredParameter(param)) {
|
|
1036
1044
|
requiredHelpers.parseOptional = true;
|
|
@@ -1040,18 +1048,18 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
1040
1048
|
requiredHelpers.parseWithCast = true;
|
|
1041
1049
|
parser = 'parseWithCast';
|
|
1042
1050
|
}
|
|
1043
|
-
if ((param.type.
|
|
1044
|
-
content += `\t${createLocalVariableName(param, 'Param')}, err := ${parser}(${paramValue}, func(v string) (${param.type.
|
|
1045
|
-
content += `\t\tp, parseErr := ${emitNumericConversion('v', param.type.
|
|
1051
|
+
if ((param.type.type === 'float32' || param.type.type === 'int32') || !go.isRequiredParameter(param)) {
|
|
1052
|
+
content += `\t${createLocalVariableName(param, 'Param')}, err := ${parser}(${paramValue}, func(v string) (${param.type.type}, error) {\n`;
|
|
1053
|
+
content += `\t\tp, parseErr := ${emitNumericConversion('v', param.type.type)}\n`;
|
|
1046
1054
|
content += '\t\tif parseErr != nil {\n\t\t\treturn 0, parseErr\n\t\t}\n';
|
|
1047
1055
|
let result = 'p';
|
|
1048
|
-
if (param.type.
|
|
1049
|
-
result = `${param.type.
|
|
1056
|
+
if (param.type.type === 'float32' || param.type.type === 'int32') {
|
|
1057
|
+
result = `${param.type.type}(${result})`;
|
|
1050
1058
|
}
|
|
1051
1059
|
content += `\t\treturn ${result}, nil\n\t})\n`;
|
|
1052
1060
|
}
|
|
1053
1061
|
else {
|
|
1054
|
-
content += `\t${createLocalVariableName(param, 'Param')}, err := ${emitNumericConversion(paramValue, param.type.
|
|
1062
|
+
content += `\t${createLocalVariableName(param, 'Param')}, err := ${emitNumericConversion(paramValue, param.type.type)}\n`;
|
|
1055
1063
|
}
|
|
1056
1064
|
content += '\tif err != nil {\n\t\treturn nil, err\n\t}\n';
|
|
1057
1065
|
}
|
|
@@ -1068,7 +1076,7 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
1068
1076
|
content += `\t\t\t${localVar}[hh[len("${headerPrefix}"):]] = to.Ptr(getHeaderValue(req.Header, hh))\n`;
|
|
1069
1077
|
content += '\t\t}\n\t}\n';
|
|
1070
1078
|
}
|
|
1071
|
-
else if (
|
|
1079
|
+
else if (param.type.kind === 'constant' && param.type.type !== 'string') {
|
|
1072
1080
|
let parseHelper;
|
|
1073
1081
|
if (!go.isRequiredParameter(param)) {
|
|
1074
1082
|
requiredHelpers.parseOptional = true;
|
|
@@ -1100,7 +1108,7 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
1100
1108
|
else if (!go.isRequiredParameter(param)) {
|
|
1101
1109
|
// we check this last as it's a superset of the previous conditions
|
|
1102
1110
|
requiredHelpers.getOptional = true;
|
|
1103
|
-
if (
|
|
1111
|
+
if (param.type.kind === 'constant') {
|
|
1104
1112
|
paramValue = `${go.getTypeDeclaration(param.type, clientPkg)}(${paramValue})`;
|
|
1105
1113
|
}
|
|
1106
1114
|
content += `\t${createLocalVariableName(param, 'Param')} := getOptional(${paramValue})\n`;
|
|
@@ -1121,7 +1129,7 @@ function parseHeaderPathQueryParams(clientPkg, method, imports) {
|
|
|
1121
1129
|
const paramNilCheck = new Array();
|
|
1122
1130
|
for (const param of values(params)) {
|
|
1123
1131
|
// check array before body in case the body is just an array
|
|
1124
|
-
if (
|
|
1132
|
+
if (param.type.kind === 'slice') {
|
|
1125
1133
|
paramNilCheck.push(`len(${getFinalParamValue(clientPkg, param, paramValues)}) > 0`);
|
|
1126
1134
|
}
|
|
1127
1135
|
else if (param.kind === 'bodyParam') {
|
|
@@ -1241,7 +1249,7 @@ function getFinalParamValue(clientPkg, param, paramValues) {
|
|
|
1241
1249
|
paramValue = getRawParamValue(param);
|
|
1242
1250
|
}
|
|
1243
1251
|
// there are a few corner-cases that require some fix-ups
|
|
1244
|
-
if ((param.kind === 'bodyParam' || go.isFormBodyParameter(param) || param.kind === 'multipartFormBodyParam') &&
|
|
1252
|
+
if ((param.kind === 'bodyParam' || go.isFormBodyParameter(param) || param.kind === 'multipartFormBodyParam') && param.type.kind === 'time') {
|
|
1245
1253
|
// time types in the body have been unmarshalled into our time helpers thus require a cast to time.Time
|
|
1246
1254
|
return `time.Time(${paramValue})`;
|
|
1247
1255
|
}
|
|
@@ -1250,12 +1258,12 @@ function getFinalParamValue(clientPkg, param, paramValues) {
|
|
|
1250
1258
|
if (param.kind === 'headerCollectionParam' || param.kind === 'pathCollectionParam' || param.kind === 'queryCollectionParam') {
|
|
1251
1259
|
// for required params that are collections of strings, we split them inline.
|
|
1252
1260
|
// not necessary for optional params as they're already in slice format.
|
|
1253
|
-
if (param.collectionFormat !== 'multi' &&
|
|
1261
|
+
if (param.collectionFormat !== 'multi' && param.type.elementType.kind === 'string') {
|
|
1254
1262
|
requiredHelpers.splitHelper = true;
|
|
1255
1263
|
return `splitHelper(${paramValue}, "${helpers.getDelimiterForCollectionFormat(param.collectionFormat)}")`;
|
|
1256
1264
|
}
|
|
1257
1265
|
}
|
|
1258
|
-
else if (go.isHeaderParameter(param) &&
|
|
1266
|
+
else if (go.isHeaderParameter(param) && param.type.kind === 'constant' && param.type.type === 'string') {
|
|
1259
1267
|
// since headers aren't escaped, we cast required, string-based enums inline
|
|
1260
1268
|
return `${go.getTypeDeclaration(param.type, clientPkg)}(${paramValue})`;
|
|
1261
1269
|
}
|
|
@@ -1315,7 +1323,7 @@ function getResultFieldName(result) {
|
|
|
1315
1323
|
case 'modelResult':
|
|
1316
1324
|
return result.modelType.name;
|
|
1317
1325
|
case 'polymorphicResult':
|
|
1318
|
-
return result.
|
|
1326
|
+
return result.interface.name;
|
|
1319
1327
|
default:
|
|
1320
1328
|
return result.fieldName;
|
|
1321
1329
|
}
|