private boolean hasAllIdentifiersBound(
            Model model,
            ResourceShape resource,
            OperationShape operation,
            IdentifierBindingIndex bindingIndex
    ) {
        StructureShape inputShape = model.expectShape(operation.getInputShape(), StructureShape.class);
        Map<String, String> bindings = bindingIndex.getOperationInputBindings(resource, operation);
        for (Map.Entry<String, ShapeId> identifier : resource.getIdentifiers().entrySet()) {
            if (!bindings.containsKey(identifier.getKey())) {
                return false;
            }

            MemberShape identifierMember = inputShape.getMember(bindings.get(identifier.getKey())).get();
            if (!identifierMember.getTarget().equals(identifier.getValue())) {
                return false;
            }
        }
        return true;
    }
Validates that operations bound to resource shapes have identifier
bindings for all the identifiers of the parent of the binding resource,
that operations bound to a resource with the {@code collection}
trait are bound using a collection binding, and operations bound with
no {@code collection} trait are bound using an instance binding.
smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/ResourceIdentifierBindingValidator.java