private List<ValidationEvent> validateStructure(
            Model model,
            OperationShape operation,
            EndpointTrait endpoint
    ) {
        List<ValidationEvent> events = new ArrayList<>();

        // Validate the host can become a valid RFC 3986 Section 3.2.2 host.
        validateExpandedPattern(operation, endpoint).ifPresent(events::add);

        // Validate the host prefix SHOULD end in a period if it has labels.
        validateTrailingPeriod(operation, endpoint).ifPresent(events::add);

        // Only validate the bindings if the input is a structure. Typing
        // validation of the input is handled elsewhere.
        model.getShape(operation.getInputShape())
                .flatMap(Shape::asStructureShape)
                .ifPresent(input -> events.addAll(validateBindings(operation, endpoint, input)));

        return events;
    }
Match the expanded template to be a valid RFC 3896 host.
smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HostLabelTraitValidator.java