//* Copyright 2020 The Dawn Authors
//*
//* Licensed under the Apache License, Version 2.0 (the "License");
//* you may not use this file except in compliance with the License.
//* You may obtain a copy of the License at
//*
//*     http://www.apache.org/licenses/LICENSE-2.0
//*
//* Unless required by applicable law or agreed to in writing, software
//* distributed under the License is distributed on an "AS IS" BASIS,
//* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//* See the License for the specific language governing permissions and
//* limitations under the License.
//*
//*
//* This generator is used to produce the number-to-string mappings for
//* Emscripten's library_webgpu.js.
//* https://github.com/emscripten-core/emscripten/blob/master/src/library_webgpu.js
//*
    {% for type in by_category["enum"] if not type.json_data.get("emscripten_no_enum_table") %}
        {{type.name.CamelCase()}}: {% if type.contiguousFromZero -%}
            [
                {% for value in type.values %}
                  {{as_jsEnumValue(value)}},
                {% endfor %}
            ]
        {%- else -%}
            {
                {% for value in type.values %}
                  {{value.value}}: {{as_jsEnumValue(value)}},
                {% endfor %}
            }
        {%- endif -%}
        ,
    {% endfor %}
