diff --git a/tools/generator-go-sdk/internal/generator/templater_models.go b/tools/generator-go-sdk/internal/generator/templater_models.go index 97e86188edb..9682f89fdb8 100644 --- a/tools/generator-go-sdk/internal/generator/templater_models.go +++ b/tools/generator-go-sdk/internal/generator/templater_models.go @@ -354,16 +354,25 @@ 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 { + if !isDiscriminator && (fieldDetails.Optional || 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) } }