//* 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 part of Emscripten's struct_info.json,
//* which is a list of struct fields that it uses to generate field offset
//* information for its own code generators.
//* https://github.com/emscripten-core/emscripten/blob/main/src/struct_info.json
//*
    {
        {% set api = metadata.api.lower() %}
        "file": "{{api}}/{{api}}.h",
        "defines": [],
        "structs": {
            "{{metadata.c_prefix}}ChainedStruct": [
                "next",
                "sType"
            ],
            {% for type in by_category["structure"] %}
                "{{as_cType(type.name)}}": [
                    {% if type.chained %}
                        "chain"
                    {%- elif type.extensible %}
                        "nextInChain"
                    {%- endif %}
                    {% for member in type.members -%}
                        {%- if (type.chained or type.extensible) or not loop.first -%}
                            ,
                        {% endif %}
                        "{{as_varName(member.name)}}"
                    {%- endfor %}

                ]
                {%- if not loop.last -%}
                    ,
                {% endif %}
            {% endfor %}

        }
    }
