//* 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 %}

        }
    }
