aboutsummaryrefslogtreecommitdiff
path: root/mojo/public/tools/bindings/generators/java_templates/enum_definition.tmpl
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 -%}