Skip to content

Commit 322f8d2

Browse files
committed
GOSDK-25: Unmarshaling optional enums in response payloads causes panic. Changing how we instantiate nullable enums in go sdk to use constructors to properly preserve nil on empty xml tag.
1 parent 17d9e5f commit 322f8d2

File tree

4 files changed

+22
-4
lines changed

4 files changed

+22
-4
lines changed

ds3-autogen-go/src/main/kotlin/com/spectralogic/ds3autogen/go/models/parser/ParseChildNodeImpls.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,7 @@ data class ParseChildNodeAsNullableEnum(
171171
val paramType: String) : ParseElement {
172172

173173
override val parsingCode: String
174-
get() { return "$modelName.$paramName = new($paramType)\n" +
175-
goIndent(3) + "parseNullableEnum(child.Content, $modelName.$paramName, aggErr)" }
174+
get() { return "$modelName.$paramName = new${paramType}FromContent(child.Content, aggErr)" }
176175
}
177176

178177
data class ParseChildNodeAsCommonPrefix(

ds3-autogen-go/src/main/resources/tmpls/go/type/checksum_type_enum.ftl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,13 @@ const (
88
)
99

1010
<#include "enum_unmarshal_to_string.ftl" />
11+
12+
func new${name}FromContent(content []byte, aggErr *AggregateError) *${name} {
13+
if len(content) == 0 {
14+
// no value
15+
return nil
16+
}
17+
result := new(${name})
18+
parseEnum(content, result, aggErr)
19+
return result
20+
}

ds3-autogen-go/src/main/resources/tmpls/go/type/enum_type.ftl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,13 @@ const (
77
)
88

99
<#include "enum_unmarshal_to_string.ftl" />
10+
11+
func new${name}FromContent(content []byte, aggErr *AggregateError) *${name} {
12+
if len(content) == 0 {
13+
// no value
14+
return nil
15+
}
16+
result := new(${name})
17+
parseEnum(content, result, aggErr)
18+
return result
19+
}

ds3-autogen-go/src/test/java/com/spectralogic/ds3autogen/go/models/parser/ParseChildNodeImpls_Test.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,7 @@ public void ParseChildNodeAsEnumTest() {
109109

110110
@Test
111111
public void ParseChildNodeAsNullableEnumTest() {
112-
final String expected = String.format("%s.%s = new(%s)\n" +
113-
" parseNullableEnum(child.Content, %s.%s, aggErr)", MODEL_NAME, PARAM_NAME, PARAM_TYPE, MODEL_NAME, PARAM_NAME);
112+
final String expected = String.format("%s.%s = new%sFromContent(child.Content, aggErr)", MODEL_NAME, PARAM_NAME, PARAM_TYPE);
114113

115114
final ParseElement parseElement = new ParseChildNodeAsNullableEnum(XML_TAG, MODEL_NAME, PARAM_NAME, PARAM_TYPE);
116115
assertThat(parseElement.getXmlTag(), is(XML_TAG));

0 commit comments

Comments
 (0)