From 074774c0bb6dbf65301d1aa63f0a7e2b6db80414 Mon Sep 17 00:00:00 2001 From: Xu Wu Date: Tue, 14 Jan 2025 16:29:36 +0800 Subject: [PATCH 1/2] omitempty tag logic split from field type --- .../internal/generator/templater_models.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tools/generator-go-sdk/internal/generator/templater_models.go b/tools/generator-go-sdk/internal/generator/templater_models.go index 97e86188edb..640bb7df313 100644 --- a/tools/generator-go-sdk/internal/generator/templater_models.go +++ b/tools/generator-go-sdk/internal/generator/templater_models.go @@ -359,11 +359,13 @@ func (c modelsTemplater) structLineForField(fieldName, fieldType string, fieldDe // nullable types should have the omitempty tag option and not be pointers jsonDetails += ",omitempty" } else { - if c.fieldIsOptional(data, fieldDetails) || fieldDetails.ReadOnly { + if c.fieldIsOptional(data, fieldDetails) || fieldDetails.ReadOnly || fieldDetails.ObjectDefinition.Nullable { fieldType = fmt.Sprintf("*%s", fieldType) + } + + // all optional/read-only fields should have the omitempty tag option, including discriminator types + if !fieldDetails.ObjectDefinition.Nullable && fieldDetails.Optional || fieldDetails.ReadOnly { jsonDetails += ",omitempty" - } else if fieldDetails.ObjectDefinition.Nullable { - fieldType = fmt.Sprintf("*%s", fieldType) } } From 009ec45fd5267660b72bf3bcf3f7eda2cb9a6bbc Mon Sep 17 00:00:00 2001 From: Xu Wu Date: Thu, 16 Jan 2025 17:40:26 +0800 Subject: [PATCH 2/2] field type for discriminator --- .../internal/generator/templater_models.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tools/generator-go-sdk/internal/generator/templater_models.go b/tools/generator-go-sdk/internal/generator/templater_models.go index 640bb7df313..9682f89fdb8 100644 --- a/tools/generator-go-sdk/internal/generator/templater_models.go +++ b/tools/generator-go-sdk/internal/generator/templater_models.go @@ -354,12 +354,19 @@ func (c modelsTemplater) structLinesForModel(data GeneratorData, fieldNames []st func (c modelsTemplater) structLineForField(fieldName, fieldType string, fieldDetails models.SDKField, data GeneratorData, excludeComments bool) (*string, error) { jsonDetails := fieldDetails.JsonName + isDiscriminator := false + objectDefinition := helpers.InnerMostSDKObjectDefinition(fieldDetails.ObjectDefinition) + if refName := objectDefinition.ReferenceName; refName != nil { + if refModel, ok := data.models[*refName]; ok && refModel.IsDiscriminatedParentType() { + isDiscriminator = true + } + } if strings.HasPrefix(fieldType, "nullable.") { // nullable types should have the omitempty tag option and not be pointers jsonDetails += ",omitempty" } else { - if c.fieldIsOptional(data, fieldDetails) || fieldDetails.ReadOnly || fieldDetails.ObjectDefinition.Nullable { + if !isDiscriminator && (fieldDetails.Optional || fieldDetails.ReadOnly || fieldDetails.ObjectDefinition.Nullable) { fieldType = fmt.Sprintf("*%s", fieldType) }