//* 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 type.javascript %}
        {{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 %}
