@azure-tools/typespec-go 0.17.5-dev.4 → 0.17.5-dev.5
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/src/codegen/core/example.js +11 -11
- package/dist/src/codegen/core/example.js.map +1 -1
- package/dist/src/codegen/core/helpers.d.ts +3 -8
- package/dist/src/codegen/core/helpers.d.ts.map +1 -1
- package/dist/src/codegen/core/helpers.js +28 -44
- package/dist/src/codegen/core/helpers.js.map +1 -1
- package/dist/src/codegen/core/imports.d.ts.map +1 -1
- package/dist/src/codegen/core/imports.js +3 -0
- package/dist/src/codegen/core/imports.js.map +1 -1
- package/dist/src/codegen/core/models.js +98 -96
- package/dist/src/codegen/core/models.js.map +1 -1
- package/dist/src/codegen/core/operations.js +4 -4
- package/dist/src/codegen/core/operations.js.map +1 -1
- package/dist/src/codegen/core/options.js +1 -5
- package/dist/src/codegen/core/options.js.map +1 -1
- package/dist/src/codegen/core/request-handler.d.ts.map +1 -1
- package/dist/src/codegen/core/request-handler.js +19 -15
- package/dist/src/codegen/core/request-handler.js.map +1 -1
- package/dist/src/codegen/core/response-handler.js +12 -10
- package/dist/src/codegen/core/response-handler.js.map +1 -1
- package/dist/src/codegen/core/responses.js +2 -10
- package/dist/src/codegen/core/responses.js.map +1 -1
- package/dist/src/codegen/core/unions.js +21 -16
- package/dist/src/codegen/core/unions.js.map +1 -1
- package/dist/src/codegen/fake/servers.js +81 -68
- package/dist/src/codegen/fake/servers.js.map +1 -1
- package/dist/src/codemodel/client.js +1 -1
- package/dist/src/codemodel/client.js.map +1 -1
- package/dist/src/codemodel/method.d.ts +1 -3
- package/dist/src/codemodel/method.d.ts.map +1 -1
- package/dist/src/codemodel/method.js +1 -2
- package/dist/src/codemodel/method.js.map +1 -1
- package/dist/src/codemodel/param.d.ts +40 -26
- package/dist/src/codemodel/param.d.ts.map +1 -1
- package/dist/src/codemodel/param.js +33 -33
- package/dist/src/codemodel/param.js.map +1 -1
- package/dist/src/codemodel/result.d.ts +11 -9
- package/dist/src/codemodel/result.d.ts.map +1 -1
- package/dist/src/codemodel/result.js +2 -4
- package/dist/src/codemodel/result.js.map +1 -1
- package/dist/src/codemodel/type.d.ts +62 -27
- package/dist/src/codemodel/type.d.ts.map +1 -1
- package/dist/src/codemodel/type.js +53 -21
- package/dist/src/codemodel/type.js.map +1 -1
- package/dist/src/tcgcadapter/clients.d.ts.map +1 -1
- package/dist/src/tcgcadapter/clients.js +41 -44
- package/dist/src/tcgcadapter/clients.js.map +1 -1
- package/dist/src/tcgcadapter/helpers.d.ts +2 -8
- package/dist/src/tcgcadapter/helpers.d.ts.map +1 -1
- package/dist/src/tcgcadapter/helpers.js +20 -18
- package/dist/src/tcgcadapter/helpers.js.map +1 -1
- package/dist/src/tcgcadapter/types.d.ts +5 -3
- package/dist/src/tcgcadapter/types.d.ts.map +1 -1
- package/dist/src/tcgcadapter/types.js +73 -27
- package/dist/src/tcgcadapter/types.js.map +1 -1
- package/package.json +10 -10
|
@@ -333,21 +333,22 @@ function generateModelDefs(modelImports, serdeImports, pkg, options, indent) {
|
|
|
333
333
|
const modelDefs = new Array();
|
|
334
334
|
for (const model of models) {
|
|
335
335
|
for (const field of model.fields) {
|
|
336
|
+
const fieldType = go.unwrapPtr(field.type);
|
|
336
337
|
const descriptionMods = new Array();
|
|
337
338
|
if (field.annotations.readOnly) {
|
|
338
339
|
descriptionMods.push("READ-ONLY");
|
|
339
340
|
}
|
|
340
341
|
else if (field.annotations.required &&
|
|
341
|
-
(
|
|
342
|
+
(fieldType.kind !== "literal" || model.usage === go.UsageFlags.Output)) {
|
|
342
343
|
descriptionMods.push("REQUIRED");
|
|
343
344
|
}
|
|
344
|
-
else if (
|
|
345
|
+
else if (fieldType.kind === "literal") {
|
|
345
346
|
if (!field.annotations.required) {
|
|
346
347
|
descriptionMods.push("FLAG");
|
|
347
348
|
}
|
|
348
349
|
descriptionMods.push("CONSTANT");
|
|
349
350
|
}
|
|
350
|
-
if (
|
|
351
|
+
if (fieldType.kind === "literal" && model.usage !== go.UsageFlags.Output) {
|
|
351
352
|
// add a comment with the const value for const properties that are sent over the wire
|
|
352
353
|
if (field.docs.description) {
|
|
353
354
|
field.docs.description += "\n";
|
|
@@ -355,9 +356,9 @@ function generateModelDefs(modelImports, serdeImports, pkg, options, indent) {
|
|
|
355
356
|
else {
|
|
356
357
|
field.docs.description = "";
|
|
357
358
|
}
|
|
358
|
-
field.docs.description += `Field has constant value ${helpers.formatLiteralValue(
|
|
359
|
+
field.docs.description += `Field has constant value ${helpers.formatLiteralValue(fieldType, false)}, any specified value is ignored.`;
|
|
359
360
|
}
|
|
360
|
-
else if (
|
|
361
|
+
else if (fieldType.kind === "rawJSON") {
|
|
361
362
|
// raw JSON is emitted as []byte, so document that the field contains raw
|
|
362
363
|
// JSON and that the caller is responsible for marshaling their data structure.
|
|
363
364
|
if (field.docs.description) {
|
|
@@ -392,15 +393,16 @@ function generateModelDefs(modelImports, serdeImports, pkg, options, indent) {
|
|
|
392
393
|
let needsDateTimeMarshalling = false;
|
|
393
394
|
let byteArrayFormat = false;
|
|
394
395
|
for (const field of model.fields) {
|
|
395
|
-
|
|
396
|
+
const fieldType = go.unwrapPtr(field.type);
|
|
397
|
+
if (fieldType.kind !== "etag") {
|
|
396
398
|
// azcore.ETag un/marshals on its own so no need to
|
|
397
399
|
// import azcore as we don't explicitly reference the type
|
|
398
|
-
serdeImports.addForType(
|
|
400
|
+
serdeImports.addForType(fieldType);
|
|
399
401
|
}
|
|
400
|
-
if (
|
|
402
|
+
if (fieldType.kind === "time") {
|
|
401
403
|
needsDateTimeMarshalling = true;
|
|
402
404
|
}
|
|
403
|
-
else if (
|
|
405
|
+
else if (fieldType.kind === "encodedBytes") {
|
|
404
406
|
byteArrayFormat = true;
|
|
405
407
|
}
|
|
406
408
|
}
|
|
@@ -497,15 +499,12 @@ function generateToMultipartForm(modelDef, indent) {
|
|
|
497
499
|
let method = `func (${receiver} ${modelDef.Model.name}) toMultipartFormData() (map[string]any, error) {\n`;
|
|
498
500
|
method += `${indent.get()}objectMap := make(map[string]any)\n`;
|
|
499
501
|
for (const field of modelDef.Model.fields) {
|
|
500
|
-
const
|
|
501
|
-
|
|
502
|
-
if (!field.byValue) {
|
|
503
|
-
star = "*";
|
|
504
|
-
}
|
|
505
|
-
if (!field.byValue) {
|
|
502
|
+
const star = helpers.deref(field.type);
|
|
503
|
+
if (field.type.kind === "ptr") {
|
|
506
504
|
method += `${indent.get()}if ${receiver}.${field.name} != nil {\n`;
|
|
507
505
|
indent.push();
|
|
508
506
|
}
|
|
507
|
+
const fieldType = helpers.recursiveUnwrapMapSlice(field.type);
|
|
509
508
|
if (fieldType.kind === "model" && !fieldType.annotations.multipartFormData) {
|
|
510
509
|
method += `${indent.get()}if err := populateMultipartJSON(objectMap, "${field.serializedName}", ${star}${receiver}.${field.name}); err != nil {\n`;
|
|
511
510
|
method += `${indent.push().get()}return nil, err\n`;
|
|
@@ -514,7 +513,7 @@ function generateToMultipartForm(modelDef, indent) {
|
|
|
514
513
|
else {
|
|
515
514
|
method += `${indent.get()}objectMap["${field.serializedName}"] = ${star}${receiver}.${field.name}\n`;
|
|
516
515
|
}
|
|
517
|
-
if (
|
|
516
|
+
if (field.type.kind === "ptr") {
|
|
518
517
|
indent.pop();
|
|
519
518
|
method += `${indent.get()}}\n`;
|
|
520
519
|
}
|
|
@@ -571,6 +570,10 @@ function generateJSONMarshallerBody(modelDef, receiver, imports, indent) {
|
|
|
571
570
|
addlProps = field.type;
|
|
572
571
|
continue;
|
|
573
572
|
}
|
|
573
|
+
// pointer-ness is captured in the code model, so dispatch on the unwrapped
|
|
574
|
+
// type and read isPtr to decide pointer-to-type emission.
|
|
575
|
+
const fieldType = go.unwrapPtr(field.type);
|
|
576
|
+
const deref = helpers.deref(field.type);
|
|
574
577
|
if (field.annotations.isDiscriminator) {
|
|
575
578
|
if (field.defaultValue) {
|
|
576
579
|
marshaller += `${indent.get()}objectMap["${field.serializedName}"] = ${helpers.formatLiteralValue(field.defaultValue, true)}\n`;
|
|
@@ -581,31 +584,28 @@ function generateJSONMarshallerBody(modelDef, receiver, imports, indent) {
|
|
|
581
584
|
marshaller += `${indent.get()}objectMap["${field.serializedName}"] = ${receiver}.${field.name}\n`;
|
|
582
585
|
}
|
|
583
586
|
}
|
|
584
|
-
else if (
|
|
587
|
+
else if (fieldType.kind === "encodedBytes") {
|
|
585
588
|
imports.add("github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime");
|
|
586
589
|
marshaller += `${indent.get()}populateByteArray(objectMap, "${field.serializedName}", ${receiver}.${field.name}, func() any {\n`;
|
|
587
|
-
marshaller += `${indent.push().get()}return runtime.EncodeByteArray(${receiver}.${field.name}, runtime.Base64${
|
|
590
|
+
marshaller += `${indent.push().get()}return runtime.EncodeByteArray(${receiver}.${field.name}, runtime.Base64${fieldType.encoding}Format)\n`;
|
|
588
591
|
marshaller += `${indent.pop().get()}})\n`;
|
|
589
592
|
modelDef.SerDe.needsJSONPopulateByteArray = true;
|
|
590
593
|
}
|
|
591
|
-
else if (go.isSlice(
|
|
594
|
+
else if (go.isSlice(fieldType, "encodedBytes")) {
|
|
592
595
|
imports.add("github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime");
|
|
593
596
|
marshaller += `${indent.get()}populateByteArray(objectMap, "${field.serializedName}", ${receiver}.${field.name}, func() any {\n`;
|
|
594
597
|
marshaller += `${indent.push().get()}encodedValue := make([]string, len(${receiver}.${field.name}))\n`;
|
|
595
598
|
marshaller += `${indent.get()}for i := 0; i < len(${receiver}.${field.name}); i++ {\n`;
|
|
596
|
-
marshaller += `${indent.push().get()}encodedValue[i] = runtime.EncodeByteArray(${receiver}.${field.name}[i], runtime.Base64${
|
|
599
|
+
marshaller += `${indent.push().get()}encodedValue[i] = runtime.EncodeByteArray(${receiver}.${field.name}[i], runtime.Base64${fieldType.elementType.encoding}Format)\n`;
|
|
597
600
|
marshaller += `${indent.pop().get()}}\n`;
|
|
598
601
|
marshaller += `${indent.get()}return encodedValue\n`;
|
|
599
602
|
marshaller += `${indent.pop().get()}})\n`;
|
|
600
603
|
modelDef.SerDe.needsJSONPopulateByteArray = true;
|
|
601
604
|
}
|
|
602
|
-
else if (go.isSlice(
|
|
605
|
+
else if (go.isSlice(fieldType, "time")) {
|
|
603
606
|
const source = `${receiver}.${field.name}`;
|
|
604
|
-
const elementType =
|
|
605
|
-
|
|
606
|
-
if (field.type.elementTypeByValue) {
|
|
607
|
-
elementPtr = "";
|
|
608
|
-
}
|
|
607
|
+
const elementType = go.unwrapPtr(fieldType.elementType);
|
|
608
|
+
const elementPtr = helpers.deref(fieldType.elementType);
|
|
609
609
|
imports.add("github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/datetime");
|
|
610
610
|
marshaller += `${indent.get()}aux := make([]${elementPtr}datetime.${elementType.format}, len(${source}), len(${source}))\n`;
|
|
611
611
|
marshaller += `${indent.get()}for i := 0; i < len(${source}); i++ {\n`;
|
|
@@ -626,8 +626,8 @@ function generateJSONMarshallerBody(modelDef, receiver, imports, indent) {
|
|
|
626
626
|
marshaller += `${indent.get()}populate(objectMap, "${field.serializedName}", aux)\n`;
|
|
627
627
|
modelDef.SerDe.needsJSONPopulate = true;
|
|
628
628
|
}
|
|
629
|
-
else if (
|
|
630
|
-
const setter = `objectMap["${field.serializedName}"] = ${helpers.formatLiteralValue(
|
|
629
|
+
else if (fieldType.kind === "literal") {
|
|
630
|
+
const setter = `objectMap["${field.serializedName}"] = ${helpers.formatLiteralValue(fieldType, true)}`;
|
|
631
631
|
if (!field.annotations.required) {
|
|
632
632
|
marshaller += `${indent.get()}if ${receiver}.${field.name} != nil {\n`;
|
|
633
633
|
marshaller += `${indent.push().get()}${setter}\n`;
|
|
@@ -637,7 +637,7 @@ function generateJSONMarshallerBody(modelDef, receiver, imports, indent) {
|
|
|
637
637
|
marshaller += `${indent.get()}${setter}\n`;
|
|
638
638
|
}
|
|
639
639
|
}
|
|
640
|
-
else if (
|
|
640
|
+
else if (fieldType.kind === "rawJSON") {
|
|
641
641
|
marshaller += `${indent.get()}populate(objectMap, "${field.serializedName}", json.RawMessage(${receiver}.${field.name}))\n`;
|
|
642
642
|
modelDef.SerDe.needsJSONPopulate = true;
|
|
643
643
|
}
|
|
@@ -648,24 +648,24 @@ function generateJSONMarshallerBody(modelDef, receiver, imports, indent) {
|
|
|
648
648
|
marshaller += `${indent.push().get()}${receiver}.${field.name} = to.Ptr(${helpers.formatLiteralValue(field.defaultValue, true)})\n`;
|
|
649
649
|
marshaller += `${indent.pop().get()}}\n`;
|
|
650
650
|
}
|
|
651
|
-
if (go.isScalar(
|
|
652
|
-
|
|
651
|
+
if (go.isScalar(fieldType, "uint8", "uint16", "uint32", "uint64", "int8", "int16", "int32", "int64") &&
|
|
652
|
+
fieldType.encodeAsString) {
|
|
653
653
|
imports.add("strconv");
|
|
654
654
|
marshaller += `${indent.get()}populateAsString(objectMap, "${field.serializedName}", ${receiver}.${field.name}, func() string {\n`;
|
|
655
|
-
const isSigned =
|
|
656
|
-
let fieldExpr =
|
|
657
|
-
if ((
|
|
658
|
-
(
|
|
655
|
+
const isSigned = fieldType.type.startsWith("int");
|
|
656
|
+
let fieldExpr = `${deref}${receiver}.${field.name}`;
|
|
657
|
+
if ((fieldType.type.startsWith("uint") && fieldType.type !== "uint64") ||
|
|
658
|
+
(fieldType.type.startsWith("int") && fieldType.type !== "int64")) {
|
|
659
659
|
fieldExpr = `${isSigned ? "int64" : "uint64"}(${fieldExpr})`;
|
|
660
660
|
}
|
|
661
661
|
marshaller += `${indent.push().get()}return strconv.${isSigned ? "FormatInt" : "FormatUint"}(${fieldExpr}, 10)\n`;
|
|
662
662
|
marshaller += `${indent.pop().get()}})\n`;
|
|
663
663
|
modelDef.SerDe.needsJSONPopulateAsString = true;
|
|
664
664
|
}
|
|
665
|
-
else if (go.isScalar(
|
|
665
|
+
else if (go.isScalar(fieldType, "bool") && fieldType.encodeAsString) {
|
|
666
666
|
imports.add("strconv");
|
|
667
667
|
marshaller += `${indent.get()}populateAsString(objectMap, "${field.serializedName}", ${receiver}.${field.name}, func() string {\n`;
|
|
668
|
-
marshaller += `${indent.push().get()}return strconv.FormatBool(
|
|
668
|
+
marshaller += `${indent.push().get()}return strconv.FormatBool(${deref}${receiver}.${field.name})\n`;
|
|
669
669
|
marshaller += `${indent.pop().get()}})\n`;
|
|
670
670
|
modelDef.SerDe.needsJSONPopulateAsString = true;
|
|
671
671
|
}
|
|
@@ -673,19 +673,19 @@ function generateJSONMarshallerBody(modelDef, receiver, imports, indent) {
|
|
|
673
673
|
let populate;
|
|
674
674
|
// some helpers require extra args after the common ones
|
|
675
675
|
let populateArgs = "";
|
|
676
|
-
if (
|
|
676
|
+
if (fieldType.kind === "time") {
|
|
677
677
|
imports.add("github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/datetime");
|
|
678
|
-
populate = `populateTime[datetime.${
|
|
679
|
-
populateArgs = `, ${
|
|
678
|
+
populate = `populateTime[datetime.${fieldType.format}]`;
|
|
679
|
+
populateArgs = `, ${fieldType.utc}`;
|
|
680
680
|
modelDef.SerDe.needsJSONPopulateTime = true;
|
|
681
681
|
}
|
|
682
|
-
else if (
|
|
682
|
+
else if (fieldType.kind === "any") {
|
|
683
683
|
populate = "populateAny";
|
|
684
684
|
modelDef.SerDe.needsJSONPopulateAny = true;
|
|
685
685
|
}
|
|
686
|
-
else if (
|
|
686
|
+
else if (fieldType.kind === "sliceArray") {
|
|
687
687
|
populate = "populateStringArray";
|
|
688
|
-
populateArgs = `, "${getSliceArrayDelimiter(
|
|
688
|
+
populateArgs = `, "${getSliceArrayDelimiter(fieldType.delimiter)}"`;
|
|
689
689
|
modelDef.SerDe.needsJSONPopulateStringArray = true;
|
|
690
690
|
}
|
|
691
691
|
else {
|
|
@@ -699,20 +699,20 @@ function generateJSONMarshallerBody(modelDef, receiver, imports, indent) {
|
|
|
699
699
|
if (addlProps) {
|
|
700
700
|
marshaller += `${indent.get()}if ${receiver}.AdditionalProperties != nil {\n`;
|
|
701
701
|
marshaller += `${indent.push().get()}for key, val := range ${receiver}.AdditionalProperties {\n`;
|
|
702
|
-
if (addlProps.valueType
|
|
702
|
+
if (go.isPtr(addlProps.valueType, "time") && addlProps.valueType.ptrType.utc) {
|
|
703
703
|
// normalize utc datetimes before casting the (pointer) map value
|
|
704
704
|
imports.add("github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/datetime");
|
|
705
705
|
marshaller += `${indent.push().get()}if val != nil {\n`;
|
|
706
706
|
marshaller += `${indent.push().get()}utcTime := val.UTC()\n`;
|
|
707
|
-
marshaller += `${indent.get()}objectMap[key] = (*datetime.${addlProps.valueType.format})(&utcTime)\n`;
|
|
707
|
+
marshaller += `${indent.get()}objectMap[key] = (*datetime.${addlProps.valueType.ptrType.format})(&utcTime)\n`;
|
|
708
708
|
marshaller += `${indent.pop().get()}} else {\n`;
|
|
709
709
|
marshaller += `${indent.push().get()}objectMap[key] = nil\n`;
|
|
710
710
|
marshaller += `${indent.pop().get()}}\n`;
|
|
711
711
|
}
|
|
712
712
|
else {
|
|
713
713
|
let assignment = "val";
|
|
714
|
-
if (addlProps.valueType
|
|
715
|
-
assignment = `(*${addlProps.valueType.format})(val)`;
|
|
714
|
+
if (go.isPtr(addlProps.valueType, "time")) {
|
|
715
|
+
assignment = `(*${addlProps.valueType.ptrType.format})(val)`;
|
|
716
716
|
}
|
|
717
717
|
marshaller += `${indent.push().get()}objectMap[key] = ${assignment}\n`;
|
|
718
718
|
}
|
|
@@ -772,18 +772,15 @@ function generateJSONUnmarshallerBody(modelDef, receiver, options, imports, inde
|
|
|
772
772
|
const emitAddlProps = function (addlProps) {
|
|
773
773
|
// indent is at the case body level when called
|
|
774
774
|
let addlPropsText = `${indent.get()}if ${receiver}.AdditionalProperties == nil {\n`;
|
|
775
|
-
|
|
776
|
-
if (!addlProps.valueTypeByValue) {
|
|
777
|
-
ref = "&";
|
|
778
|
-
}
|
|
775
|
+
const ref = addlProps.valueType.kind === "ptr" ? "&" : "";
|
|
779
776
|
addlPropsText += `${indent.push().get()}${receiver}.AdditionalProperties = ${go.getTypeDeclaration(addlProps, modelDef.Model.pkg)}{}\n`;
|
|
780
777
|
addlPropsText += `${indent.pop().get()}}\n`;
|
|
781
778
|
addlPropsText += `${indent.get()}if val != nil {\n`;
|
|
782
|
-
let auxType = go.getTypeDeclaration(addlProps.valueType, modelDef.Model.pkg);
|
|
779
|
+
let auxType = go.getTypeDeclaration(go.unwrapPtr(addlProps.valueType), modelDef.Model.pkg);
|
|
783
780
|
let assignment = `${ref}aux`;
|
|
784
|
-
if (addlProps.valueType
|
|
781
|
+
if (go.isPtr(addlProps.valueType, "time")) {
|
|
785
782
|
imports.add("time");
|
|
786
|
-
auxType = addlProps.valueType.format;
|
|
783
|
+
auxType = addlProps.valueType.ptrType.format;
|
|
787
784
|
assignment = `(*time.Time)(${assignment})`;
|
|
788
785
|
}
|
|
789
786
|
addlPropsText += `${indent.push().get()}var aux ${auxType}\n`;
|
|
@@ -804,30 +801,30 @@ function generateJSONUnmarshallerBody(modelDef, receiver, options, imports, inde
|
|
|
804
801
|
addlProps = field.type;
|
|
805
802
|
continue;
|
|
806
803
|
}
|
|
804
|
+
// dispatch on the unwrapped type; pointer-ness is captured in the code model.
|
|
805
|
+
const fieldType = go.unwrapPtr(field.type);
|
|
807
806
|
unmarshalBody += `${indent.get()}case "${field.serializedName}":\n`;
|
|
808
807
|
indent.push(); // case body level
|
|
809
|
-
if (hasDiscriminatorInterface(
|
|
808
|
+
if (hasDiscriminatorInterface(fieldType)) {
|
|
810
809
|
unmarshalBody += generateDiscriminatorUnmarshaller(modelDef.Model, field, receiver, indent);
|
|
811
810
|
needsErrCheck = true;
|
|
812
811
|
}
|
|
813
|
-
else if (
|
|
814
|
-
unmarshalBody += `${indent.get()}err = unpopulateStringArray(val, "${field.name}", &${receiver}.${field.name}, "${getSliceArrayDelimiter(
|
|
812
|
+
else if (fieldType.kind === "sliceArray") {
|
|
813
|
+
unmarshalBody += `${indent.get()}err = unpopulateStringArray(val, "${field.name}", &${receiver}.${field.name}, "${getSliceArrayDelimiter(fieldType.delimiter)}")\n`;
|
|
815
814
|
modelDef.SerDe.needsJSONUnpopulateStringArray = true;
|
|
816
815
|
needsErrCheck = true;
|
|
817
816
|
}
|
|
818
|
-
else if (
|
|
819
|
-
unmarshalBody += `${indent.get()}err = unpopulateTime[datetime.${
|
|
817
|
+
else if (fieldType.kind === "time") {
|
|
818
|
+
unmarshalBody += `${indent.get()}err = unpopulateTime[datetime.${fieldType.format}](val, "${field.name}", &${receiver}.${field.name})\n`;
|
|
820
819
|
modelDef.SerDe.needsJSONUnpopulateTime = true;
|
|
821
820
|
needsErrCheck = true;
|
|
822
821
|
}
|
|
823
|
-
else if (go.isSlice(
|
|
822
|
+
else if (go.isSlice(fieldType, "time")) {
|
|
824
823
|
imports.add("time");
|
|
825
824
|
imports.add("github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/datetime");
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
}
|
|
830
|
-
unmarshalBody += `${indent.get()}var aux []${elementPtr}datetime.${field.type.elementType.format}\n`;
|
|
825
|
+
const elementType = go.unwrapPtr(fieldType.elementType);
|
|
826
|
+
const elementPtr = helpers.deref(fieldType.elementType);
|
|
827
|
+
unmarshalBody += `${indent.get()}var aux []${elementPtr}datetime.${elementType.format}\n`;
|
|
831
828
|
unmarshalBody += `${indent.get()}err = unpopulate(val, "${field.name}", &aux)\n`;
|
|
832
829
|
unmarshalBody += `${indent.get()}for _, au := range aux {\n`;
|
|
833
830
|
unmarshalBody += `${indent.push().get()}${receiver}.${field.name} = append(${receiver}.${field.name}, (${elementPtr}time.Time)(au))\n`;
|
|
@@ -835,14 +832,14 @@ function generateJSONUnmarshallerBody(modelDef, receiver, options, imports, inde
|
|
|
835
832
|
modelDef.SerDe.needsJSONUnpopulate = true;
|
|
836
833
|
needsErrCheck = true;
|
|
837
834
|
}
|
|
838
|
-
else if (
|
|
835
|
+
else if (fieldType.kind === "encodedBytes") {
|
|
839
836
|
imports.add("github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime");
|
|
840
837
|
unmarshalBody += `${indent.get()}if val != nil && string(val) != "null" {\n`;
|
|
841
|
-
unmarshalBody += `${indent.push().get()}err = runtime.DecodeByteArray(string(val), &${receiver}.${field.name}, runtime.Base64${
|
|
838
|
+
unmarshalBody += `${indent.push().get()}err = runtime.DecodeByteArray(string(val), &${receiver}.${field.name}, runtime.Base64${fieldType.encoding}Format)\n`;
|
|
842
839
|
unmarshalBody += `${indent.pop().get()}}\n`;
|
|
843
840
|
needsErrCheck = true;
|
|
844
841
|
}
|
|
845
|
-
else if (go.isSlice(
|
|
842
|
+
else if (go.isSlice(fieldType, "encodedBytes")) {
|
|
846
843
|
imports.add("github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime");
|
|
847
844
|
unmarshalBody += `${indent.get()}var encodedValue []string\n`;
|
|
848
845
|
unmarshalBody += `${indent.get()}err = unpopulate(val, "${field.name}", &encodedValue)\n`;
|
|
@@ -850,19 +847,19 @@ function generateJSONUnmarshallerBody(modelDef, receiver, options, imports, inde
|
|
|
850
847
|
indent.push();
|
|
851
848
|
unmarshalBody += `${indent.get()}${receiver}.${field.name} = make([][]byte, len(encodedValue))\n`;
|
|
852
849
|
unmarshalBody += `${indent.get()}for i := 0; i < len(encodedValue) && err == nil; i++ {\n`;
|
|
853
|
-
unmarshalBody += `${indent.push().get()}err = runtime.DecodeByteArray(encodedValue[i], &${receiver}.${field.name}[i], runtime.Base64${
|
|
850
|
+
unmarshalBody += `${indent.push().get()}err = runtime.DecodeByteArray(encodedValue[i], &${receiver}.${field.name}[i], runtime.Base64${fieldType.elementType.encoding}Format)\n`;
|
|
854
851
|
unmarshalBody += `${indent.pop().get()}}\n`;
|
|
855
852
|
indent.pop();
|
|
856
853
|
unmarshalBody += `${indent.get()}}\n`;
|
|
857
854
|
modelDef.SerDe.needsJSONUnpopulate = true;
|
|
858
855
|
needsErrCheck = true;
|
|
859
856
|
}
|
|
860
|
-
else if (
|
|
857
|
+
else if (fieldType.kind === "rawJSON") {
|
|
861
858
|
unmarshalBody += `${indent.get()}if string(val) != "null" {\n`;
|
|
862
859
|
unmarshalBody += `${indent.push().get()}${receiver}.${field.name} = val\n`;
|
|
863
860
|
unmarshalBody += `${indent.pop().get()}}\n`;
|
|
864
861
|
}
|
|
865
|
-
else if (go.isScalar(
|
|
862
|
+
else if (go.isScalar(fieldType, "bool") && fieldType.encodeAsString) {
|
|
866
863
|
imports.add("strconv");
|
|
867
864
|
imports.add("strings");
|
|
868
865
|
imports.add("github.com/Azure/azure-sdk-for-go/sdk/azcore/to");
|
|
@@ -877,13 +874,13 @@ function generateJSONUnmarshallerBody(modelDef, receiver, options, imports, inde
|
|
|
877
874
|
modelDef.SerDe.needsJSONUnpopulateFromString = true;
|
|
878
875
|
needsErrCheck = true;
|
|
879
876
|
}
|
|
880
|
-
else if (go.isScalar(
|
|
881
|
-
|
|
882
|
-
const scalarType =
|
|
877
|
+
else if (go.isScalar(fieldType, "uint8", "uint16", "uint32", "uint64", "int8", "int16", "int32", "int64") &&
|
|
878
|
+
fieldType.encodeAsString) {
|
|
879
|
+
const scalarType = fieldType.type;
|
|
883
880
|
imports.add("strconv");
|
|
884
881
|
imports.add("github.com/Azure/azure-sdk-for-go/sdk/azcore/to");
|
|
885
882
|
unmarshalBody += `${indent.get()}err = unpopulateFromString(val, "${field.name}", func(encodedValue string) error {\n`;
|
|
886
|
-
unmarshalBody += `${indent.push().get()}v, parseErr := strconv.${
|
|
883
|
+
unmarshalBody += `${indent.push().get()}v, parseErr := strconv.${fieldType.type.startsWith("int") ? "ParseInt" : "ParseUint"}(encodedValue, 10, 0)\n`;
|
|
887
884
|
unmarshalBody += `${indent.get()}${helpers.buildIfBlock(indent, {
|
|
888
885
|
condition: "parseErr == nil",
|
|
889
886
|
body: (indent) => {
|
|
@@ -902,7 +899,7 @@ function generateJSONUnmarshallerBody(modelDef, receiver, options, imports, inde
|
|
|
902
899
|
}
|
|
903
900
|
else {
|
|
904
901
|
const unpopulateField = `err = unpopulate(val, "${field.name}", &${receiver}.${field.name})\n`;
|
|
905
|
-
if (
|
|
902
|
+
if (fieldType.kind === "string" && field.annotations.unmarshalEmptyStringAsNil) {
|
|
906
903
|
unmarshalBody += `${indent.get()}${helpers.buildIfBlock(indent, {
|
|
907
904
|
condition: `string(val) != \`""\``,
|
|
908
905
|
body: (indent) => `${indent.get()}${unpopulateField}`,
|
|
@@ -1116,19 +1113,20 @@ function generateXMLMarshaller(modelDef, imports, indent) {
|
|
|
1116
1113
|
}
|
|
1117
1114
|
text += generateAliasType(modelDef.Model, receiver, true, imports, indent);
|
|
1118
1115
|
for (const field of modelDef.Model.fields) {
|
|
1119
|
-
|
|
1116
|
+
const fieldType = go.unwrapPtr(field.type);
|
|
1117
|
+
if (fieldType.kind === "slice") {
|
|
1120
1118
|
text += `${indent.get()}if ${receiver}.${field.name} != nil {\n`;
|
|
1121
1119
|
text += `${indent.push().get()}aux.${field.name} = &${receiver}.${field.name}\n`;
|
|
1122
1120
|
text += `${indent.pop().get()}}\n`;
|
|
1123
1121
|
}
|
|
1124
|
-
else if (go.isAdditionalProperties(field) ||
|
|
1122
|
+
else if (go.isAdditionalProperties(field) || fieldType.kind === "map") {
|
|
1125
1123
|
text += `${indent.get()}aux.${field.name} = (additionalProperties)(${receiver}.${field.name})\n`;
|
|
1126
1124
|
}
|
|
1127
|
-
else if (
|
|
1125
|
+
else if (fieldType.kind === "encodedBytes") {
|
|
1128
1126
|
imports.add("github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime");
|
|
1129
1127
|
text += `${indent.get()}if ${receiver}.${field.name} != nil {\n`;
|
|
1130
1128
|
indent.push();
|
|
1131
|
-
text += `${indent.get()}encoded${field.name} := runtime.EncodeByteArray(${receiver}.${field.name}, runtime.Base64${
|
|
1129
|
+
text += `${indent.get()}encoded${field.name} := runtime.EncodeByteArray(${receiver}.${field.name}, runtime.Base64${fieldType.encoding}Format)\n`;
|
|
1132
1130
|
text += `${indent.get()}aux.${field.name} = &encoded${field.name}\n`;
|
|
1133
1131
|
indent.pop();
|
|
1134
1132
|
text += `${indent.get()}}\n`;
|
|
@@ -1155,19 +1153,20 @@ function generateXMLUnmarshaller(modelDef, imports, indent) {
|
|
|
1155
1153
|
text += `${indent.push().get()}return err\n`;
|
|
1156
1154
|
text += `${indent.pop().get()}}\n`;
|
|
1157
1155
|
for (const field of modelDef.Model.fields) {
|
|
1158
|
-
|
|
1156
|
+
const fieldType = go.unwrapPtr(field.type);
|
|
1157
|
+
if (fieldType.kind === "time") {
|
|
1159
1158
|
text += `${indent.get()}if aux.${field.name} != nil && !(*time.Time)(aux.${field.name}).IsZero() {\n`;
|
|
1160
1159
|
text += `${indent.push().get()}${receiver}.${field.name} = (*time.Time)(aux.${field.name})\n`;
|
|
1161
1160
|
text += `${indent.pop().get()}}\n`;
|
|
1162
1161
|
}
|
|
1163
|
-
else if (go.isAdditionalProperties(field) ||
|
|
1162
|
+
else if (go.isAdditionalProperties(field) || fieldType.kind === "map") {
|
|
1164
1163
|
text += `${indent.get()}${receiver}.${field.name} = (map[string]*string)(aux.${field.name})\n`;
|
|
1165
1164
|
}
|
|
1166
|
-
else if (
|
|
1165
|
+
else if (fieldType.kind === "encodedBytes") {
|
|
1167
1166
|
imports.add("github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime");
|
|
1168
1167
|
text += `${indent.get()}if aux.${field.name} != nil {\n`;
|
|
1169
1168
|
indent.push();
|
|
1170
|
-
text += `${indent.get()}if err := runtime.DecodeByteArray(*aux.${field.name}, &${receiver}.${field.name}, runtime.Base64${
|
|
1169
|
+
text += `${indent.get()}if err := runtime.DecodeByteArray(*aux.${field.name}, &${receiver}.${field.name}, runtime.Base64${fieldType.encoding}Format); err != nil {\n`;
|
|
1171
1170
|
text += `${indent.push().get()}return err\n`;
|
|
1172
1171
|
text += `${indent.pop().get()}}\n`;
|
|
1173
1172
|
indent.pop();
|
|
@@ -1191,18 +1190,19 @@ function generateAliasType(modelType, receiver, forMarshal, imports, indent) {
|
|
|
1191
1190
|
text += `${indent.get()}aux := &struct {\n`;
|
|
1192
1191
|
text += `${indent.push().get()}*alias\n`;
|
|
1193
1192
|
for (const field of modelType.fields) {
|
|
1193
|
+
const fieldType = go.unwrapPtr(field.type);
|
|
1194
1194
|
const sn = getXMLSerialization(field);
|
|
1195
|
-
if (
|
|
1195
|
+
if (fieldType.kind === "time") {
|
|
1196
1196
|
imports.add("github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/datetime");
|
|
1197
|
-
text += `${indent.get()}${field.name} *datetime.${
|
|
1197
|
+
text += `${indent.get()}${field.name} *datetime.${fieldType.format} \`xml:"${sn}"\`\n`;
|
|
1198
1198
|
}
|
|
1199
|
-
else if (go.isAdditionalProperties(field) ||
|
|
1199
|
+
else if (go.isAdditionalProperties(field) || fieldType.kind === "map") {
|
|
1200
1200
|
text += `${indent.get()}${field.name} additionalProperties \`xml:"${sn}"\`\n`;
|
|
1201
1201
|
}
|
|
1202
|
-
else if (
|
|
1203
|
-
text += `${indent.get()}${field.name} *${go.getTypeDeclaration(
|
|
1202
|
+
else if (fieldType.kind === "slice") {
|
|
1203
|
+
text += `${indent.get()}${field.name} *${go.getTypeDeclaration(fieldType, modelType.pkg)} \`xml:"${sn}"\`\n`;
|
|
1204
1204
|
}
|
|
1205
|
-
else if (
|
|
1205
|
+
else if (fieldType.kind === "encodedBytes") {
|
|
1206
1206
|
text += `${indent.get()}${field.name} *string \`xml:"${sn}"\`\n`;
|
|
1207
1207
|
}
|
|
1208
1208
|
}
|
|
@@ -1215,11 +1215,12 @@ function generateAliasType(modelType, receiver, forMarshal, imports, indent) {
|
|
|
1215
1215
|
if (forMarshal) {
|
|
1216
1216
|
// emit code to initialize time fields
|
|
1217
1217
|
for (const field of modelType.fields) {
|
|
1218
|
-
|
|
1218
|
+
const fieldType = go.unwrapPtr(field.type);
|
|
1219
|
+
if (fieldType.kind !== "time") {
|
|
1219
1220
|
continue;
|
|
1220
1221
|
}
|
|
1221
1222
|
imports.add("github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/datetime");
|
|
1222
|
-
text += `${indent.get()}${field.name}: (*datetime.${
|
|
1223
|
+
text += `${indent.get()}${field.name}: (*datetime.${fieldType.format})(${receiver}.${field.name}),\n`;
|
|
1223
1224
|
}
|
|
1224
1225
|
}
|
|
1225
1226
|
text += `${indent.pop().get()}}\n`;
|
|
@@ -1296,9 +1297,10 @@ class ModelDef {
|
|
|
1296
1297
|
text += helpers.formatDocComment(field.docs);
|
|
1297
1298
|
}
|
|
1298
1299
|
let typeName = go.getTypeDeclaration(field.type, this.Model.pkg);
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1300
|
+
const fieldType = go.unwrapPtr(field.type);
|
|
1301
|
+
if (fieldType.kind === "literal") {
|
|
1302
|
+
// for constants we use the underlying type name; getTypeDeclaration above emits the pointer.
|
|
1303
|
+
typeName = `${helpers.deref(field.type)}${go.getLiteralTypeDeclaration(fieldType.type)}`;
|
|
1302
1304
|
}
|
|
1303
1305
|
let serialization = field.serializedName;
|
|
1304
1306
|
if (this.Format === "JSON") {
|
|
@@ -1312,7 +1314,7 @@ class ModelDef {
|
|
|
1312
1314
|
if (this.Format === "XML" && !go.isAdditionalProperties(field)) {
|
|
1313
1315
|
tag = ` \`xml:"${serialization}"\``;
|
|
1314
1316
|
}
|
|
1315
|
-
text += `${indent.get()}${field.name} ${
|
|
1317
|
+
text += `${indent.get()}${field.name} ${typeName}${tag}\n`;
|
|
1316
1318
|
first = false;
|
|
1317
1319
|
}
|
|
1318
1320
|
text += "}\n\n";
|