blob: d37288ac5dc66d63bc85eb51ab5d6f4d42867b3b [file] [log] [blame]
{%- macro enum_value(enum, field, index) -%}
{%- if field.value -%}
(int) ({{field.value|expression_to_text('i32')}})
{%- elif index == 0 -%}
0
{%- else -%}
{{enum.fields[index - 1]|name}} + 1
{%- endif -%}
{%- endmacro -%}
{%- macro enum_def(enum, top_level) -%}
public {{ 'static ' if not top_level }}final class {{enum|name}} {
{% for field in enum.fields %}
public static final int {{field|name}} = {{enum_value(enum, field, loop.index0)}};
{% endfor %}
private static final boolean IS_EXTENSIBLE = {% if enum.extensible %}true{% else %}false{% endif %};
public static boolean isKnownValue(int value) {
{%- if enum.fields %}
switch (value) {
{%- for enum_field in enum.fields|groupby('numeric_value') %}
case {{enum_field[0]}}:
{%- endfor %}
return true;
}
{%- endif %}
return false;
}
public static void validate(int value) {
if (IS_EXTENSIBLE || isKnownValue(value))
return;
throw new DeserializationException("Invalid enum value.");
}
private {{enum|name}}() {}
}
{%- endmacro -%}