private void validateOperationInput(Model model, OperationShape operationShape, List<ValidationEvent> events) {
        // Validate operation input has no member with both streaming and requiresLength
        // traits applied
        if (operationShape.getInputShape().equals(ShapeId.from("smithy.api#Unit"))) {
            events.add(error(operationShape,
                    "The `requestCompression` trait can only be applied to operations which have an "
                            + "input shape defined"));
            return;
        }
        StructureShape inputShape = model.expectShape(operationShape.getInputShape(), StructureShape.class);
        for (MemberShape memberShape : inputShape.members()) {
            Shape targetShape = model.expectShape(memberShape.getTarget());
            if (targetShape.hasTrait(StreamingTrait.ID) && targetShape.hasTrait(RequiresLengthTrait.ID)) {
                events.add(error(operationShape,
                        String.format(
                                "The `requestCompression` trait can only be applied to operations which do not have "
                                        + "input members that target shapes with both the `streaming` and `requiresLength` "
                                        + "traits applied, but found member `%s` targeting `%s`",
                                memberShape.getId(),
                                targetShape.getId())));
            }
        }
    }
Validates the requestCompression trait.

- Validates that the operation input has no member with both streaming and
  requiresLength traits applied
- Validate encodings has at least one compression algorithm
- Validate encodings are all supported compression algorithms
smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/RequestCompressionTraitValidator.java