Skip to content

Commit c8a6edc

Browse files
committed
[Go] Add enum get method
1 parent 8aadd19 commit c8a6edc

File tree

1 file changed

+48
-1
lines changed

1 file changed

+48
-1
lines changed

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/golang/flyweight/GolangFlyweightGenerator.java

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1300,7 +1300,7 @@ private void generateEnum(final List<Token> tokens) throws IOException
13001300

13011301
out.append(generateEnumValues(tokens.subList(1, tokens.size() - 1), enumName, enumToken));
13021302

1303-
// out.append(generateEnumLookupMethod(tokens.subList(1, tokens.size() - 1), enumToken));
1303+
out.append(generateEnumLookupMethod(tokens.subList(1, tokens.size() - 1), enumToken));
13041304

13051305
out.append(generateEnumDisplay(tokens.subList(1, tokens.size() - 1), enumToken));
13061306

@@ -1442,6 +1442,53 @@ private CharSequence generateEnumValues(
14421442
return sb;
14431443
}
14441444

1445+
1446+
private CharSequence generateEnumLookupMethod(final List<Token> tokens, final Token encodingToken)
1447+
{
1448+
final String enumName = formatClassName(encodingToken.applicableTypeName());
1449+
final StringBuilder sb = new StringBuilder();
1450+
final String goTypeName = goTypeName(encodingToken.encoding().primitiveType());
1451+
1452+
addInclude("errors");
1453+
new Formatter(sb).format(
1454+
" var %1$sLookupErr = errors.New(\"unknown value for enum %1$s [E103]\")\n" +
1455+
" func Lookup%1$s(value %2$s) (%1$s, error) {\n" +
1456+
" switch value {\n",
1457+
enumName,
1458+
goTypeName);
1459+
1460+
for (final Token token : tokens)
1461+
{
1462+
final CharSequence constVal = generateLiteral(
1463+
token.encoding().primitiveType(), token.encoding().constValue().toString());
1464+
1465+
sb.append(" case ").append(constVal)
1466+
.append(": return ").append(enumName).append("_")
1467+
.append(token.name()).append(", nil\n");
1468+
}
1469+
1470+
final CharSequence nullVal = generateLiteral(
1471+
encodingToken.encoding().primitiveType(), encodingToken.encoding().applicableNullValue().toString());
1472+
1473+
sb.append(" case ").append(nullVal).append(": return ")
1474+
.append(enumName).append("_").append("NULL_VALUE, nil\n")
1475+
.append(" }\n\n");
1476+
1477+
if (shouldDecodeUnknownEnumValues)
1478+
{
1479+
1480+
sb.append(" return ").append(enumName).append("_").append("UNKNOWN").append(", nil\n}\n");
1481+
}
1482+
else
1483+
{
1484+
new Formatter(sb).format(" return 0, %1$sLookupErr\n}\n",
1485+
enumName);
1486+
}
1487+
1488+
return sb;
1489+
}
1490+
1491+
14451492
private CharSequence generateFieldNotPresentCondition(
14461493
final int sinceVersion, final Encoding encoding, final String indent)
14471494
{

0 commit comments

Comments
 (0)