private String createBindingMessage(Map<String, ?> bindings) {
        return bindings.entrySet()
                .stream()
                .map(entry -> format("required member named `%s` that targets `%s`",
                        entry.getKey(),
                        entry.getValue().toString()))
                .sorted()
                .collect(Collectors.joining(", "));
    }
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