private List<HttpBinding> createStructureBindings(StructureShape struct, boolean isRequest) {
        List<HttpBinding> bindings = new ArrayList<>();
        List<MemberShape> unbound = new ArrayList<>();
        boolean foundPayload = false;

        for (MemberShape member : struct.getAllMembers().values()) {
            if (member.hasTrait(HttpHeaderTrait.ID)) {
                HttpHeaderTrait trait = member.expectTrait(HttpHeaderTrait.class);
                bindings.add(new HttpBinding(member, HttpBinding.Location.HEADER, trait.getValue(), trait));
            } else if (member.hasTrait(HttpPrefixHeadersTrait.ID)) {
                HttpPrefixHeadersTrait trait = member.expectTrait(HttpPrefixHeadersTrait.class);
                bindings.add(new HttpBinding(member, HttpBinding.Location.PREFIX_HEADERS, trait.getValue(), trait));
            } else if (isRequest && member.hasTrait(HttpQueryTrait.ID)) {
                HttpQueryTrait trait = member.expectTrait(HttpQueryTrait.class);
                bindings.add(new HttpBinding(member, HttpBinding.Location.QUERY, trait.getValue(), trait));
            } else if (isRequest && member.hasTrait(HttpQueryParamsTrait.ID)) {
                HttpQueryParamsTrait trait = member.expectTrait(HttpQueryParamsTrait.class);
                bindings.add(new HttpBinding(member, HttpBinding.Location.QUERY_PARAMS, member.getMemberName(), trait));
            } else if (member.hasTrait(HttpPayloadTrait.ID)) {
                foundPayload = true;
                HttpPayloadTrait trait = member.expectTrait(HttpPayloadTrait.class);
                bindings.add(new HttpBinding(member, HttpBinding.Location.PAYLOAD, member.getMemberName(), trait));
            } else if (isRequest && member.hasTrait(HttpLabelTrait.ID)) {
                HttpLabelTrait trait = member.expectTrait(HttpLabelTrait.class);
                bindings.add(new HttpBinding(member, HttpBinding.Location.LABEL, member.getMemberName(), trait));
            } else if (!isRequest && member.hasTrait(HttpResponseCodeTrait.ID)) {
                HttpResponseCodeTrait trait = member.expectTrait(HttpResponseCodeTrait.class);
                bindings.add(new HttpBinding(
                        member,
                        HttpBinding.Location.RESPONSE_CODE,
                        member.getMemberName(),
                        trait));
            } else {
                unbound.add(member);
            }
        }

        if (!unbound.isEmpty()) {
            if (foundPayload) {
                unbound.forEach(member -> bindings.add(
                        new HttpBinding(member, HttpBinding.Location.UNBOUND, member.getMemberName(), null)));
            } else {
                unbound.forEach(member -> bindings.add(
                        new HttpBinding(member, HttpBinding.Location.DOCUMENT, member.getMemberName(), null)));
            }
        }

        return bindings;
    }
Returns true if the response has a modeled body.

@param operation Operation to check.
@return Returns true if the operation has document or payload bindings.
smithy-model/src/main/java/software/amazon/smithy/model/knowledge/HttpBindingIndex.java