// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/* DO NOT EDIT. Generated from {{module.path}} */
{%- if variant -%}
{%- set variant_path = "%s-%s"|format(module.path, variant) -%}
{%- else -%}
{%- set variant_path = module.path -%}
{%- endif %}
{%- set header_guard = "%s_IMPL_STRUCT_H_"|format(
variant_path|upper|replace("/","_")|replace(".","_")|
replace("-", "_")) %}
#ifndef {{header_guard}}
#define {{header_guard}}
#include "{{variant_path}}_c.h"
#include <memory>
#include <string>
#include <vector>
#include <optional>
{%- for struct in structs %}
{%- set struct_name = struct|get_name_for_kind %}
// Struct {{struct_name}}.
struct {{struct_name}} {
public:
{{struct_name}}();
explicit {{struct_name}}(const {{struct_name}}&from);
{{struct_name}}& operator=(const {{struct_name}}&) = delete;
explicit {{struct_name}}({{struct_name}}&&from);
~{{struct_name}}();
{% for packed_field in struct.packed.packed_fields_in_ordinal_order %}
{%- set kind = packed_field.field.kind %}
{%- if kind|is_array_kind %}
std::vector<{{kind.kind|cpp_wrapper_type}}> {{packed_field.field.name}};
{%- elif kind|is_struct_kind %}
std::optional<{{kind|cpp_wrapper_type}}> {{packed_field.field.name}};
{%- else %}
{{packed_field.field.kind|cpp_wrapper_type}} {{packed_field.field.name}}
{%- if packed_field.field.default %} = {{packed_field.field|default_value}} {%- endif %}
{%- if packed_field.field.kind|is_any_interface_kind %} = nullptr {%- endif %};
{%- endif %}
{%- endfor %}
};
{%- endfor %}
#endif // {{header_guard}}