public boolean conflictsWith(TopicBinding<?> other) {
        // The bindings can't conflict if they topics don't conflict.
        if (!getTopic().conflictsWith(other.getTopic())) {
            return false;
        }

        // If one has a payload and the other does not, then they conflict.
        if (payloadShape == null) {
            return other.payloadShape != null;
        } else if (other.payloadShape == null) {
            return true;
        }

        // Can only conflict at this point if they target different shapes.
        ShapeId targetA = getPayloadShape().get().getId();
        ShapeId targetB = other.getPayloadShape().get().getId();
        return !targetA.equals(targetB);
    }
Returns true if the topic binding conflicts with another.

<p>A topic binding is considered conflicting if both bindings have
conflicting topics determined through {@link Topic#conflictsWith}
and the topic bindings utilize a different payload. If both topics
do not have a payload then they are not conflicting. If both topics
have a payload, but they target the same shape, then they are not
conflicting.

@param other Other topic binding to compare against.
@return Returns true if the topic bindings conflict.
smithy-mqtt-traits/src/main/java/software/amazon/smithy/mqtt/traits/TopicBinding.java