@@ -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