blob: d37288ac5dc66d63bc85eb51ab5d6f4d42867b3b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
{%- 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 -%}
|