CHIP_ERROR ComplexArgumentParser::Setup(const char * label, chip::app::Clusters::{{namespace}}::Structs::{{name}}::Type & request, Json::Value & value)
{
    VerifyOrReturnError(value.isObject(), CHIP_ERROR_INVALID_ARGUMENT);

    // Copy to track which members we already processed.
    Json::Value valueCopy(value);

    {{#zcl_struct_items}}
    {{#unless isOptional}}
    {{~! Fabric index fields are not sent on writes, so don't force people to
      provide them. ~}}
    {{#unless (is_num_equal fieldIdentifier 254)}}
    ReturnErrorOnFailure(ComplexArgumentParser::EnsureMemberExist("{{parent.name}}.{{asLowerCamelCase label}}", "{{asLowerCamelCase label}}", value.isMember("{{asLowerCamelCase label}}")));
    {{/unless}}
    {{/unless}}
    {{/zcl_struct_items}}

    char labelWithMember[kMaxLabelLength];
    {{#zcl_struct_items}}
    {{#if isOptional}}
    if (value.isMember("{{asLowerCamelCase label}}"))
    {
    {{else if (is_num_equal fieldIdentifier 254)}}
    if (value.isMember("{{asLowerCamelCase label}}"))
    {
    {{/if}}
    snprintf(labelWithMember, sizeof(labelWithMember), "%s.%s", label, "{{asLowerCamelCase label}}");
    ReturnErrorOnFailure(ComplexArgumentParser::Setup(labelWithMember, request.{{asLowerCamelCase label}}, value["{{asLowerCamelCase label}}"]));
    {{#if isOptional}}
    }
    {{else if (is_num_equal fieldIdentifier 254)}}
    }
    {{/if}}
    valueCopy.removeMember("{{asLowerCamelCase label}}");

    {{/zcl_struct_items}}

    return ComplexArgumentParser::EnsureNoMembersRemaining(label, valueCopy);
}

void ComplexArgumentParser::Finalize(chip::app::Clusters::{{namespace}}::Structs::{{name}}::Type & request)
{
    {{#zcl_struct_items}}
    ComplexArgumentParser::Finalize(request.{{asLowerCamelCase label}});
    {{/zcl_struct_items}}
}

