// SPDX-FileCopyrightText: Contributors to the Power Grid Model project <powergridmodel@lfenergy.org>
//
// SPDX-License-Identifier: MPL-2.0

// This header file is automatically generated. DO NOT modify it manually!

// clang-format off
#pragma once

#include "gen_getters.hpp" // NOLINT

#include "../../common/common.hpp"             // NOLINT
#include "../../common/enum.hpp"               // NOLINT
#include "../../common/three_phase_tensor.hpp" // NOLINT
#include "../meta_data.hpp"                    // NOLINT

#include "../{{ name }}.hpp" // NOLINT

{% autoescape false %}
namespace power_grid_model::meta_data {

// template specialization to get list of attributes in the value field

{% for attribute_class in classes -%}

{%- if attribute_class.is_template -%}
template <symmetry_tag sym_type>
struct get_attributes_list<{{ attribute_class.name }}<sym_type>> {
    using sym = sym_type;
{% else -%}
template<>
struct get_attributes_list<{{ attribute_class.name }}> {
{%- endif %}
    static constexpr std::array<MetaAttribute, {{ attribute_class.full_attributes|length }}> value{
            // all attributes including base class
            {% for attribute in attribute_class.full_attributes %}
            meta_data_gen::get_meta_attribute<&{{ attribute_class.full_name }}::{{ attribute.names }}>(offsetof({{ attribute_class.full_name }}, {{ attribute.names }}), "{{ attribute.names }}"),
            {%- endfor %}
    };
};

{% endfor %}


} // namespace power_grid_model::meta_data

// clang-format on
{% endautoescape %}
