blob: 94c4ee9ff7ab8819fbc459041751ad3597a0ce21 [file] [log] [blame]
{{>header}}
#include <app/data-model/Decode.h>
#include <app/data-model/Encode.h>
#pragma once
namespace chip {
{{#chip_tests_only_clusters}}
{{#chip_tests_only_cluster_commands}}
struct {{name}}Command
{
{{#chip_tests_only_cluster_command_parameters}}
{{zapTypeToEncodableClusterObjectType type ns=cluster}} {{name}};
{{/chip_tests_only_cluster_command_parameters}}
CHIP_ERROR Encode(chip::TLV::TLVWriter & writer, chip::TLV::Tag tag) const
{
chip::TLV::TLVType outer;
ReturnErrorOnFailure(writer.StartContainer(tag, chip::TLV::kTLVType_Structure, outer));
{{#chip_tests_only_cluster_command_parameters}}
ReturnErrorOnFailure(chip::app::DataModel::Encode(writer, chip::TLV::ContextTag({{index}}), {{name}}));
{{/chip_tests_only_cluster_command_parameters}}
ReturnErrorOnFailure(writer.EndContainer(outer));
return CHIP_NO_ERROR;
}
CHIP_ERROR Decode(chip::TLV::TLVReader & reader)
{
CHIP_ERROR err = CHIP_NO_ERROR;
chip::TLV::TLVType outer;
VerifyOrReturnError(chip::TLV::kTLVType_Structure == reader.GetType(), CHIP_ERROR_WRONG_TLV_TYPE);
ReturnErrorOnFailure(reader.EnterContainer(outer));
while ((err = reader.Next()) == CHIP_NO_ERROR)
{
VerifyOrReturnError(chip::TLV::IsContextTag(reader.GetTag()), CHIP_ERROR_INVALID_TLV_TAG);
switch (chip::TLV::TagNumFromTag(reader.GetTag()))
{
{{#chip_tests_only_cluster_command_parameters}}
case {{index}}:
ReturnErrorOnFailure(chip::app::DataModel::Decode(reader, {{name}}));
break;
{{/chip_tests_only_cluster_command_parameters}}
default:
break;
}
}
VerifyOrReturnError(err == CHIP_END_OF_TLV, err);
ReturnErrorOnFailure(reader.ExitContainer(outer));
return CHIP_NO_ERROR;
}
};
{{/chip_tests_only_cluster_commands}}
{{#chip_tests_only_cluster_responses}}
struct {{#if responseName}}{{responseName}}{{else}}{{name}}Response{{/if}}
{
{{#chip_tests_only_cluster_response_parameters}}
{{zapTypeToEncodableClusterObjectType type}} {{name}};
{{/chip_tests_only_cluster_response_parameters}}
CHIP_ERROR Encode(chip::TLV::TLVWriter & writer, chip::TLV::Tag tag) const
{
chip::TLV::TLVType outer;
ReturnErrorOnFailure(writer.StartContainer(tag, chip::TLV::kTLVType_Structure, outer));
{{#chip_tests_only_cluster_response_parameters}}
ReturnErrorOnFailure(chip::app::DataModel::Encode(writer, chip::TLV::ContextTag({{index}}), {{name}}));
{{/chip_tests_only_cluster_response_parameters}}
ReturnErrorOnFailure(writer.EndContainer(outer));
return CHIP_NO_ERROR;
}
CHIP_ERROR Decode(chip::TLV::TLVReader & reader)
{
CHIP_ERROR err = CHIP_NO_ERROR;
chip::TLV::TLVType outer;
VerifyOrReturnError(chip::TLV::kTLVType_Structure == reader.GetType(), CHIP_ERROR_WRONG_TLV_TYPE);
ReturnErrorOnFailure(reader.EnterContainer(outer));
while ((err = reader.Next()) == CHIP_NO_ERROR)
{
VerifyOrReturnError(chip::TLV::IsContextTag(reader.GetTag()), CHIP_ERROR_INVALID_TLV_TAG);
switch (chip::TLV::TagNumFromTag(reader.GetTag()))
{
{{#chip_tests_only_cluster_response_parameters}}
case {{index}}:
ReturnErrorOnFailure(chip::app::DataModel::Decode(reader, {{name}}));
break;
{{/chip_tests_only_cluster_response_parameters}}
default:
break;
}
}
VerifyOrReturnError(err == CHIP_END_OF_TLV, err);
ReturnErrorOnFailure(reader.ExitContainer(outer));
return CHIP_NO_ERROR;
}
};
{{/chip_tests_only_cluster_responses}}
{{/chip_tests_only_clusters}}
namespace app {
namespace Clusters {
{{#chip_tests_only_clusters}}
namespace {{name}} {
namespace Commands {
{{#chip_tests_only_cluster_commands}}
namespace {{name}} {
using Type = struct {{name}}Command;
}
{{/chip_tests_only_cluster_commands}}
{{#chip_tests_only_cluster_responses}}
namespace {{#if responseName}}{{responseName}}{{else}}{{name}}Response{{/if}} {
using DecodableType = struct {{#if responseName}}{{responseName}}{{else}}{{name}}Response{{/if}};
}
{{/chip_tests_only_cluster_responses}}
} // namespace Commands
} // namespace {{name}}
{{/chip_tests_only_clusters}}
} // namespace Clusters
} // namespace app
} // namespace chip