@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.
Files changed (71) hide show
  1. package/dist/codegen.go/src/example.js +75 -75
  2. package/dist/codegen.go/src/example.js.map +1 -1
  3. package/dist/codegen.go/src/fake/factory.d.ts.map +1 -1
  4. package/dist/codegen.go/src/fake/factory.js +29 -24
  5. package/dist/codegen.go/src/fake/factory.js.map +1 -1
  6. package/dist/codegen.go/src/fake/servers.js +106 -98
  7. package/dist/codegen.go/src/fake/servers.js.map +1 -1
  8. package/dist/codegen.go/src/helpers.d.ts +57 -4
  9. package/dist/codegen.go/src/helpers.d.ts.map +1 -1
  10. package/dist/codegen.go/src/helpers.js +200 -128
  11. package/dist/codegen.go/src/helpers.js.map +1 -1
  12. package/dist/codegen.go/src/imports.d.ts +1 -1
  13. package/dist/codegen.go/src/imports.d.ts.map +1 -1
  14. package/dist/codegen.go/src/imports.js +13 -12
  15. package/dist/codegen.go/src/imports.js.map +1 -1
  16. package/dist/codegen.go/src/interfaces.js +2 -2
  17. package/dist/codegen.go/src/interfaces.js.map +1 -1
  18. package/dist/codegen.go/src/models.d.ts.map +1 -1
  19. package/dist/codegen.go/src/models.js +81 -81
  20. package/dist/codegen.go/src/models.js.map +1 -1
  21. package/dist/codegen.go/src/operations.d.ts.map +1 -1
  22. package/dist/codegen.go/src/operations.js +100 -113
  23. package/dist/codegen.go/src/operations.js.map +1 -1
  24. package/dist/codegen.go/src/options.js +2 -2
  25. package/dist/codegen.go/src/options.js.map +1 -1
  26. package/dist/codegen.go/src/polymorphics.d.ts.map +1 -1
  27. package/dist/codegen.go/src/polymorphics.js +29 -24
  28. package/dist/codegen.go/src/polymorphics.js.map +1 -1
  29. package/dist/codegen.go/src/responses.js +2 -2
  30. package/dist/codegen.go/src/responses.js.map +1 -1
  31. package/dist/codegen.go/src/time.js +13 -14
  32. package/dist/codegen.go/src/time.js.map +1 -1
  33. package/dist/codegen.go/src/xmlAdditionalProps.js +1 -2
  34. package/dist/codegen.go/src/xmlAdditionalProps.js.map +1 -1
  35. package/dist/codemodel.go/src/examples.d.ts +20 -20
  36. package/dist/codemodel.go/src/examples.d.ts.map +1 -1
  37. package/dist/codemodel.go/src/examples.js +2 -2
  38. package/dist/codemodel.go/src/examples.js.map +1 -1
  39. package/dist/codemodel.go/src/package.d.ts +4 -4
  40. package/dist/codemodel.go/src/package.d.ts.map +1 -1
  41. package/dist/codemodel.go/src/package.js +3 -3
  42. package/dist/codemodel.go/src/package.js.map +1 -1
  43. package/dist/codemodel.go/src/param.d.ts +32 -24
  44. package/dist/codemodel.go/src/param.d.ts.map +1 -1
  45. package/dist/codemodel.go/src/param.js +54 -1
  46. package/dist/codemodel.go/src/param.js.map +1 -1
  47. package/dist/codemodel.go/src/result.d.ts +12 -10
  48. package/dist/codemodel.go/src/result.d.ts.map +1 -1
  49. package/dist/codemodel.go/src/result.js +21 -4
  50. package/dist/codemodel.go/src/result.js.map +1 -1
  51. package/dist/codemodel.go/src/type.d.ts +219 -86
  52. package/dist/codemodel.go/src/type.d.ts.map +1 -1
  53. package/dist/codemodel.go/src/type.js +137 -127
  54. package/dist/codemodel.go/src/type.js.map +1 -1
  55. package/dist/typespec-go/src/emitter.d.ts.map +1 -1
  56. package/dist/typespec-go/src/emitter.js +80 -0
  57. package/dist/typespec-go/src/emitter.js.map +1 -1
  58. package/dist/typespec-go/src/lib.d.ts +1 -0
  59. package/dist/typespec-go/src/lib.d.ts.map +1 -1
  60. package/dist/typespec-go/src/lib.js +5 -0
  61. package/dist/typespec-go/src/lib.js.map +1 -1
  62. package/dist/typespec-go/src/tcgcadapter/adapter.js +5 -0
  63. package/dist/typespec-go/src/tcgcadapter/adapter.js.map +1 -1
  64. package/dist/typespec-go/src/tcgcadapter/clients.d.ts.map +1 -1
  65. package/dist/typespec-go/src/tcgcadapter/clients.js +71 -58
  66. package/dist/typespec-go/src/tcgcadapter/clients.js.map +1 -1
  67. package/dist/typespec-go/src/tcgcadapter/types.d.ts +3 -3
  68. package/dist/typespec-go/src/tcgcadapter/types.d.ts.map +1 -1
  69. package/dist/typespec-go/src/tcgcadapter/types.js +47 -46
  70. package/dist/typespec-go/src/tcgcadapter/types.js.map +1 -1
  71. 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 (go.isBytesType(method.responseEnvelope.result.monomorphicType)) {
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 (go.isSliceType(method.responseEnvelope.result.monomorphicType) && method.responseEnvelope.result.monomorphicType.rawJSONAsBytes) {
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' && go.isSliceType(method.responseEnvelope.result.monomorphicType)) {
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 (go.isTimeType(method.responseEnvelope.result.monomorphicType)) {
357
- responseField = `(*${method.responseEnvelope.result.monomorphicType.dateTimeFormat})(${responseField})`;
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
- if (go.isBytesType(bodyParam.type)) {
425
- content += `\tbody, err := server.UnmarshalRequestAsByteArray(req, runtime.Base64${bodyParam.type.encoding}Format)\n`;
426
- content += '\tif err != nil {\n\t\treturn nil, err\n\t}\n';
427
- }
428
- else if (go.isSliceType(bodyParam.type) && bodyParam.type.rawJSONAsBytes) {
429
- content += '\tbody, err := io.ReadAll(req.Body)\n';
430
- content += '\tif err != nil {\n\t\treturn nil, err\n\t}\n';
431
- content += '\treq.Body.Close()\n';
432
- }
433
- else if (go.isInterfaceType(bodyParam.type)) {
434
- requiredHelpers.readRequestBody = true;
435
- content += '\traw, err := readRequestBody(req)\n';
436
- content += '\tif err != nil {\n\t\treturn nil, err\n\t}\n';
437
- content += `\tbody, err := unmarshal${bodyParam.type.name}(raw)\n`;
438
- content += '\tif err != nil {\n\t\treturn nil, err\n\t}\n';
439
- }
440
- else {
441
- let bodyTypeName = go.getTypeDeclaration(bodyParam.type, clientPkg);
442
- if (go.isTimeType(bodyParam.type)) {
443
- bodyTypeName = bodyParam.type.dateTimeFormat;
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
- if (go.isConstantType(param.type) || go.isModelType(param.type)) {
470
- pkgPrefix = clientPkg + '.';
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 (go.isQualifiedType(type) && type.exportName === 'MultipartContent');
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 (go.isModelType(helpers.recursiveUnwrapMapSlice(type))) {
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 (go.isQualifiedType(type) && type.exportName === 'ReadSeekCloser') {
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 (go.isConstantType(type)) {
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 (go.isPrimitiveType(type)) {
552
- switch (type.typeName) {
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.typeName, paramVar);
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.typeName);
565
- assignedValue = `${type.typeName}(parsed)`;
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.typeName}`);
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 (go.isSliceType(type)) {
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 (go.isSliceType(type)) {
594
- if (go.isQualifiedType(type.elementType) && type.elementType.exportName === 'ReadSeekCloser') {
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 type ${go.getTypeDeclaration(type.elementType)}`);
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 type ${go.getTypeDeclaration(type)}`);
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 (go.isModelType(param.type)) {
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 (go.isConstantType(param.type)) {
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
- if (go.isConstantType(param.type)) {
640
- assignedValue = `${go.getTypeDeclaration(param.type, clientPkg)}(req.FormValue(key))`;
641
- }
642
- else if (go.isPrimitiveType(param.type) && param.type.typeName === 'string') {
643
- assignedValue = 'req.FormValue(key)';
644
- }
645
- else {
646
- throw new CodegenError('InternalError', `uhandled form parameter type ${go.getTypeDeclaration(param.type)}`);
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 (go.isPrimitiveType(param.type.elementType) && param.type.elementType.typeName === 'string') {
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) && go.isConstantType(param.type) && param.type.type === 'string') {
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
- ((go.isPrimitiveType(param.type) && param.type.typeName === 'string') ||
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 (!(go.isPrimitiveType(param.type.elementType) && param.type.elementType.typeName === 'string')) {
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
- if (go.isConstantType(param.type.elementType)) {
895
- elementFormat = param.type.elementType.type;
896
- }
897
- else if (go.isPrimitiveType(param.type.elementType)) {
898
- elementFormat = param.type.elementType.typeName;
899
- }
900
- else if (go.isBytesType(param.type.elementType)) {
901
- elementFormat = param.type.elementType.encoding;
902
- }
903
- else if (go.isTimeType(param.type.elementType)) {
904
- elementFormat = param.type.elementType.dateTimeFormat;
905
- }
906
- else {
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 (go.isConstantType(param.type.elementType)) {
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 (go.isPrimitiveType(param.type) && param.type.typeName === 'bool') {
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 (go.isBytesType(param.type)) {
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 (go.isTimeType(param.type)) {
987
- if (param.type.dateTimeFormat === 'dateType' || param.type.dateTimeFormat === 'timeRFC3339') {
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.dateTimeFormat === 'timeRFC3339') {
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.dateTimeFormat === 'dateTimeRFC1123' || param.type.dateTimeFormat === 'dateTimeRFC3339') {
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.dateTimeFormat === 'dateTimeRFC1123') {
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 (go.isPrimitiveType(param.type) && (param.type.typeName === 'float32' || param.type.typeName === 'float64' || param.type.typeName === 'int32' || param.type.typeName === 'int64')) {
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.typeName === 'float32' || param.type.typeName === 'int32') || !go.isRequiredParameter(param)) {
1044
- content += `\t${createLocalVariableName(param, 'Param')}, err := ${parser}(${paramValue}, func(v string) (${param.type.typeName}, error) {\n`;
1045
- content += `\t\tp, parseErr := ${emitNumericConversion('v', param.type.typeName)}\n`;
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.typeName === 'float32' || param.type.typeName === 'int32') {
1049
- result = `${param.type.typeName}(${result})`;
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.typeName)}\n`;
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 (go.isConstantType(param.type) && param.type.type !== 'string') {
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 (go.isConstantType(param.type)) {
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 (go.isSliceType(param.type)) {
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') && go.isTimeType(param.type)) {
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' && go.isPrimitiveType(param.type.elementType) && param.type.elementType.typeName === 'string') {
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) && go.isConstantType(param.type) && param.type.type === 'string') {
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.interfaceType.name;
1326
+ return result.interface.name;
1319
1327
  default:
1320
1328
  return result.fieldName;
1321
1329
  }