private List<ValidationEvent> validateStructure(StructureShape structure) {
        return structure.getAllMembers()
                .values()
                .stream()
                .filter(member -> member.hasTrait(HttpHeaderTrait.ID))
                .collect(groupingBy(shape -> shape.expectTrait(HttpHeaderTrait.class).getValue().toLowerCase(Locale.US),
                        mapping(MemberShape::getMemberName, toList())))
                .entrySet()
                .stream()
                .filter(entry -> entry.getValue().size() > 1)
                .map(entry -> error(structure,
                        String.format(
                                "`httpHeader` field name binding conflicts found for the `%s` header in the "
                                        + "following structure members: %s",
                                entry.getKey(),
                                ValidationUtils.tickedList(entry.getValue()))))
                .collect(toList());
    }
Gather the allowed characters for HTTP headers (tchar from RFC 9110 section 5.6.2). *
smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HttpHeaderTraitValidator.java