Skip to content

Commit

Permalink
Fix enum names and unmarshalling bug
Browse files Browse the repository at this point in the history
  • Loading branch information
Vlad Barosan committed Mar 30, 2018
1 parent 236966b commit 531d631
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 31 deletions.
2 changes: 1 addition & 1 deletion src/Model/EnumValueGo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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}";
}
}
}
14 changes: 10 additions & 4 deletions src/Model/ParameterGo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ public string DefaultValueString
}

/// <summary>
/// Get Name for parameter for Go map.
/// Get Name for parameter for Go map.
/// If parameter is client parameter, then return client.<parametername>
/// </summary>
/// <returns></returns>
Expand Down Expand Up @@ -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";
}

/// <summary>
Expand All @@ -300,7 +306,7 @@ public static class ParameterGoExtensions
/// </summary>
public static string Format(this ParameterGo parameter)
{
return parameter.IsPassedByValue() ? "{0}" : "*{0}";
return parameter.IsPassedByValue() ? "{0}" : "*{0}";
}

/// <summary>
Expand Down Expand Up @@ -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)";
Expand Down
15 changes: 10 additions & 5 deletions src/Templates/MarshallingXml.cshtml
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
</text>
Expand Down
30 changes: 21 additions & 9 deletions src/TransformerGo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -120,19 +127,24 @@ private void TransformEnumTypes(CodeModelGo cmg)

var enumValues = new List<EnumValue>();

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
};

enumValues.Add(baseTypeEnumValue);

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);
Expand All @@ -152,7 +164,7 @@ private void TransformEnumTypes(CodeModelGo cmg)
}
else
{
mt.DiscriminatorEnum = cmg.Add(New<EnumType>(new
mt.DiscriminatorEnum = cmg.Add(New<EnumTypeGo>(new
{
Name = enumWithSameName == null ? mt.PolymorphicDiscriminator : $"{mt.PolymorphicDiscriminator}{mt.GetInterfaceName()}",
Values = enumValues,
Expand All @@ -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);
Expand Down
24 changes: 12 additions & 12 deletions test/src/tests/generated/body-string/models.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 531d631

Please sign in to comment.