private Optional<ValidationEvent> validateEvent(StructureShape shape, MemberShape payload) {
        List<String> unmarked = shape.getAllMembers()
                .values()
                .stream()
                .filter(FunctionalUtils.not(this::isMarked))
                .map(MemberShape::getMemberName)
                .collect(Collectors.toList());

        if (unmarked.isEmpty()) {
            return Optional.empty();
        }

        return Optional.of(error(shape,
                String.format(
                        "This event structure contains a member marked with the `eventPayload` trait, so all other members "
                                + "must be marked with the `eventHeader` trait. However, the following member(s) are not marked "
                                + "with the eventHeader trait: %s",
                        ValidationUtils.tickedList(unmarked))));
    }
Ensures that when an event structure contains an eventPayload member,
that all other members are bound to headers.

<p>Only a single member can be marked with the eventPayload trait, and
this is validated using {@link ExclusiveStructureMemberTraitValidator}.
smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/EventPayloadTraitValidator.java