diff --git a/src/Model/EnumValueGo.cs b/src/Model/EnumValueGo.cs index 0e2ed2da4c..76a7a22ce2 100644 --- a/src/Model/EnumValueGo.cs +++ b/src/Model/EnumValueGo.cs @@ -18,7 +18,7 @@ public static string FormatName(EnumTypeGo parent, EnumValueGo value) // TODO: ideally the core would set the Parent field to that of the EnumTypeGo // to which this belongs, for now this is how we work around that. var parentName = parent.Name.ToString(); - return $"{parentName.Substring(0, parentName.Length - 4)}{value.Name}"; + return $"{parentName.Substring(0, parentName.Length - 4)}{value.MemberName}"; } } } diff --git a/src/Model/ParameterGo.cs b/src/Model/ParameterGo.cs index e71c062264..5f36939567 100644 --- a/src/Model/ParameterGo.cs +++ b/src/Model/ParameterGo.cs @@ -123,7 +123,7 @@ public string DefaultValueString } /// - /// Get Name for parameter for Go map. + /// Get Name for parameter for Go map. /// If parameter is client parameter, then return client. /// /// @@ -275,7 +275,13 @@ public string GetOptionalComparand() return "nil"; } - return $"{et.Name}None"; + var typeName = et.Name.ToString(); + if (typeName.EndsWith("Type")) + { + typeName = typeName.Substring(0, typeName.Length - 4); + } + + return $"{typeName}None"; } /// @@ -300,7 +306,7 @@ public static class ParameterGoExtensions /// public static string Format(this ParameterGo parameter) { - return parameter.IsPassedByValue() ? "{0}" : "*{0}"; + return parameter.IsPassedByValue() ? "{0}" : "*{0}"; } /// @@ -338,7 +344,7 @@ public static string GetStringFormat(this ParameterGo parameter, string defaultF // e.g. (*fooparam).Format(rfc339Format) defaultFormat = $"({defaultFormat})"; } - + if (parameter.ModelType.IsPrimaryType(KnownPrimaryType.DateTimeRfc1123)) { return $"{defaultFormat}.In(gmt).Format(time.RFC1123)"; diff --git a/src/Templates/MarshallingXml.cshtml b/src/Templates/MarshallingXml.cshtml index f1194f9946..7229c946ec 100644 --- a/src/Templates/MarshallingXml.cshtml +++ b/src/Templates/MarshallingXml.cshtml @@ -40,15 +40,20 @@ @(Model.Name.FixedValue.ToShortName())Array := []@(Model.GetInterfaceName()){} for t, err := d.Token(); err == nil; t, err = d.Token() { - tt, ok := t.(xml.StartElement) - if !ok { - continue - } - @(Model.Name.FixedValue.ToShortName()), err := unmarshal@(Model.GetInterfaceName())(d, tt) + ttStart, ok := t.(xml.StartElement) + if ok { + @(Model.Name.FixedValue.ToShortName()), err := unmarshal@(Model.GetInterfaceName())(d, ttStart) if err == nil { @(Model.Name.FixedValue.ToShortName())Array = append(@(Model.Name.FixedValue.ToShortName())Array, @(Model.Name.FixedValue.ToShortName())) } } + + ttEnd, ok := t.(xml.EndElement) + if ok && start.End() == ttEnd { + break; + } + continue; + } return @(Model.Name.FixedValue.ToShortName())Array, nil } diff --git a/src/TransformerGo.cs b/src/TransformerGo.cs index 1e7229c441..2060f2349e 100644 --- a/src/TransformerGo.cs +++ b/src/TransformerGo.cs @@ -86,10 +86,17 @@ private void TransformEnumTypes(CodeModelGo cmg) foreach (var et in cmg.EnumTypes) { var e = et as EnumTypeGo; - var ev = new EnumValueGo(); - ev.Name = "None"; - ev.Description = $"{EnumValueGo.FormatName(e, ev)} represents an empty {e.Name}."; + var ev = new EnumValueGo + { + Name = "None" + }; + ev.Description = $"represents an empty {e.Name}."; e.Values.Add(ev); + + foreach (var enumValue in et.Values) + { + enumValue.Name = EnumValueGo.FormatName((EnumTypeGo)et, (EnumValueGo)enumValue); + } } // And add any others with a defined name and value list (but not already located) @@ -120,9 +127,14 @@ private void TransformEnumTypes(CodeModelGo cmg) var enumValues = new List(); - var baseTypeEnumValue = new EnumValue + var typeName = $"{CodeNamerGo.Instance.GetTypeName(mt.PolymorphicDiscriminator)}"; + if (typeName.EndsWith("Type")) + { + typeName = typeName.Substring(0, typeName.Length - 4); + } + var baseTypeEnumValue = new EnumValueGo { - Name = $"{CodeNamerGo.Instance.GetTypeName(mt.PolymorphicDiscriminator)}{CodeNamerGo.Instance.GetTypeName(mt.SerializedName)}", + Name = $"{typeName}{CodeNamerGo.Instance.GetTypeName(mt.SerializedName)}", SerializedName = mt.SerializedName }; @@ -130,9 +142,9 @@ private void TransformEnumTypes(CodeModelGo cmg) foreach (var dt in mt.DerivedTypes) { - var ev = new EnumValue + var ev = new EnumValueGo { - Name = $"{CodeNamerGo.Instance.GetTypeName(mt.PolymorphicDiscriminator)}{CodeNamerGo.Instance.GetTypeName(dt.SerializedName)}", + Name = $"{typeName}{CodeNamerGo.Instance.GetTypeName(dt.SerializedName)}", SerializedName = dt.SerializedName }; enumValues.Add(ev); @@ -152,7 +164,7 @@ private void TransformEnumTypes(CodeModelGo cmg) } else { - mt.DiscriminatorEnum = cmg.Add(New(new + mt.DiscriminatorEnum = cmg.Add(New(new { Name = enumWithSameName == null ? mt.PolymorphicDiscriminator : $"{mt.PolymorphicDiscriminator}{mt.GetInterfaceName()}", Values = enumValues, @@ -167,7 +179,7 @@ private static void AssureUniqueNames(CodeModelGo cmg) // NOTE: this must be done after all enum types have been accounted for foreach (var enumType in cmg.EnumTypes) { - enumType.SetName(CodeNamerGo.Instance.GetTypeName(enumType.Name.FixedValue)); + enumType.SetName(CodeNamerGo.Instance.GetTypeName(enumType.Name)); foreach (var v in enumType.Values) { v.Name = CodeNamerGo.Instance.GetEnumMemberName(v.Name); diff --git a/test/src/tests/generated/body-string/models.go b/test/src/tests/generated/body-string/models.go index d0b89e5c0b..4571fdab04 100644 --- a/test/src/tests/generated/body-string/models.go +++ b/test/src/tests/generated/body-string/models.go @@ -25,23 +25,23 @@ func joinConst(s interface{}, sep string) string { return strings.Join(ss, sep) } -// ColorsType enumerates the values for colors. +// ColorsType enumerates the values for colors type. type ColorsType string const ( - // BlueColor ... - BlueColor ColorsType = "blue_color" - // GreenColor ... - GreenColor ColorsType = "green-color" - // None ColorsNone represents an empty ColorsType. - None ColorsType = "" - // Redcolor ... - Redcolor ColorsType = "red color" + // ColorsBlueColor ... + ColorsBlueColor ColorsType = "blue_color" + // ColorsGreenColor ... + ColorsGreenColor ColorsType = "green-color" + // ColorsNone ColorsNone represents an empty ColorsType. + ColorsNone ColorsType = "" + // ColorsRedcolor ... + ColorsRedcolor ColorsType = "red color" ) // PossibleColorsTypeValues returns an array of possible values for the ColorsType const type. func PossibleColorsTypeValues() []ColorsType { - return []ColorsType{BlueColor, GreenColor, None, Redcolor} + return []ColorsType{ColorsBlueColor, ColorsGreenColor, ColorsNone, ColorsRedcolor} } // Error ... @@ -139,7 +139,7 @@ func (gmr GetMbcsResponse) Status() string { // GetNotExpandableResponse ... type GetNotExpandableResponse struct { rawResponse *http.Response - // Value - Possible values include: 'Redcolor', 'GreenColor', 'BlueColor', 'None' + // Value - Possible values include: 'ColorsRedcolor', 'ColorsGreenColor', 'ColorsBlueColor', 'ColorsNone' Value ColorsType `json:"value,omitempty"` } @@ -225,7 +225,7 @@ func (gnr GetNullResponse) Status() string { // GetReferencedResponse ... type GetReferencedResponse struct { rawResponse *http.Response - // Value - Possible values include: 'Redcolor', 'GreenColor', 'BlueColor', 'None' + // Value - Possible values include: 'ColorsRedcolor', 'ColorsGreenColor', 'ColorsBlueColor', 'ColorsNone' Value ColorsType `json:"value,omitempty"` }