{%- macro enum_def(enum_name, enum) -%} {{enum_name}} = {}; {%- set prev_enum = 0 %} {%- for field in enum.fields %} {%- if field.value %} {{enum_name}}.{{field.name}} = {{field.value|expression_to_text}}; {%- elif loop.first %} {{enum_name}}.{{field.name}} = 0; {%- else %} {{enum_name}}.{{field.name}} = {{enum_name}}.{{enum.fields[loop.index0 - 1].name}} + 1; {%- endif %} {%- endfor %} {{enum_name}}.isKnownEnumValue = function(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; }; {{enum_name}}.validate = function(enumValue) { var isExtensible = {% if enum.extensible %}true{% else %}false{% endif %}; if (isExtensible || this.isKnownEnumValue(enumValue)) return validator.validationError.NONE; return validator.validationError.UNKNOWN_ENUM_VALUE; }; {%- endmacro %}