#pragma once

#include <app-common/zap-generated/attribute-id.h>
#include <app/data-model/Nullable.h>

#include <string>
#include <vector>

namespace clusters {

{% for struct in structs %}
struct {{struct.name}}
{
  CHIP_ERROR Decode(chip::TLV::TLVReader & reader)
  {
    chip::app::Clusters::detail::Structs::{{struct.name}}::DecodableType t;
    CHIP_ERROR err = t.Decode(reader);
    if(err == CHIP_NO_ERROR) {
      {%-      for field in struct.fields %}
      {{field.name}} = t.{{field.name}};
      {%-      endfor  %}
    }
    return err;
  }

  CHIP_ERROR Encode(chip::TLV::TLVWriter & writer, chip::TLV::Tag tag) const
  {
    chip::app::Clusters::detail::Structs::{{struct.name}}::Type t;
    {%-      for field in struct.fields %}
    t.{{field.name}} = {{field.name}};
    {%-      endfor  %}
    return t.Encode(writer, tag);
  }

  {%-   for field in struct.fields %}
  {{field | getField(None, idl)}} {{field.name}};
  {%-  endfor  %}
};
{%- endfor %}

}
