@java.lang.Override
    public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
            return true;
        }
        if (!(obj instanceof CreateMessageRequest other)) {
            return super.equals(obj);
        }

        if (hasMessageId() != other.hasMessageId()) {
            return false;
        }
        if (hasMessageId()) {
            if (getMessageId() != other.getMessageId()) {
                return false;
            }
        }
        if (hasIsSystemMessage() != other.hasIsSystemMessage()) {
            return false;
        }
        if (hasIsSystemMessage()) {
            if (getIsSystemMessage() != other.getIsSystemMessage()) {
                return false;
            }
        }
        if (hasGroupId() != other.hasGroupId()) {
            return false;
        }
        if (hasGroupId()) {
            if (getGroupId() != other.getGroupId()) {
                return false;
            }
        }
        if (hasRecipientId() != other.hasRecipientId()) {
            return false;
        }
        if (hasRecipientId()) {
            if (getRecipientId() != other.getRecipientId()) {
                return false;
            }
        }
        if (hasDeliveryDate() != other.hasDeliveryDate()) {
            return false;
        }
        if (hasDeliveryDate()) {
            if (getDeliveryDate() != other.getDeliveryDate()) {
                return false;
            }
        }
        if (hasText() != other.hasText()) {
            return false;
        }
        if (hasText()) {
            if (!getText().equals(other.getText())) {
                return false;
            }
        }
        if (!getRecordsList().equals(other.getRecordsList())) {
            return false;
        }
        if (hasBurnAfter() != other.hasBurnAfter()) {
            return false;
        }
        if (hasBurnAfter()) {
            if (getBurnAfter() != other.getBurnAfter()) {
                return false;
            }
        }
        if (hasPreMessageId() != other.hasPreMessageId()) {
            return false;
        }
        if (hasPreMessageId()) {
            if (getPreMessageId() != other.getPreMessageId()) {
                return false;
            }
        }
        return getCustomAttributesList().equals(other.getCustomAttributesList())
                && getUnknownFields().equals(other.getUnknownFields());
    }
<code>repeated .im.turms.proto.Value custom_attributes = 15;</code>
turms-server-common/src/main/java/im/turms/server/common/access/client/dto/request/message/CreateMessageRequest.java