diff --git a/src/corelib/serialization/qcborarray.h b/src/corelib/serialization/qcborarray.h index ba7f4dc80d0..dd0628b3bb3 100644 --- a/src/corelib/serialization/qcborarray.h +++ b/src/corelib/serialization/qcborarray.h @@ -267,6 +267,7 @@ public: static QCborArray fromStringList(const QStringList &list); static QCborArray fromVariantList(const QVariantList &list); static QCborArray fromJsonArray(const QJsonArray &array); + static QCborArray fromJsonArray(QJsonArray &&array) noexcept; QVariantList toVariantList() const; QJsonArray toJsonArray() const; diff --git a/src/corelib/serialization/qcbormap.h b/src/corelib/serialization/qcbormap.h index 97d7d301330..f84552d992f 100644 --- a/src/corelib/serialization/qcbormap.h +++ b/src/corelib/serialization/qcbormap.h @@ -318,6 +318,7 @@ public: static QCborMap fromVariantMap(const QVariantMap &map); static QCborMap fromVariantHash(const QVariantHash &hash); static QCborMap fromJsonObject(const QJsonObject &o); + static QCborMap fromJsonObject(QJsonObject &&o) noexcept; QVariantMap toVariantMap() const; QVariantHash toVariantHash() const; QJsonObject toJsonObject() const; diff --git a/src/corelib/serialization/qjsoncbor.cpp b/src/corelib/serialization/qjsoncbor.cpp index 53ee73d9054..3d79388b1da 100644 --- a/src/corelib/serialization/qjsoncbor.cpp +++ b/src/corelib/serialization/qjsoncbor.cpp @@ -875,6 +875,18 @@ QCborArray QCborArray::fromJsonArray(const QJsonArray &array) return result; } +/*! + \overload + \since 6.3 + */ +QCborArray QCborArray::fromJsonArray(QJsonArray &&array) noexcept +{ + QCborArray result; + result.d = std::exchange(array.a, {}); + return result; + +} + /*! Converts the CBOR values to QVariant using QCborValue::toVariant() and "stringifies" all the CBOR keys in this map, returning the QVariantMap that @@ -989,4 +1001,15 @@ QCborMap QCborMap::fromJsonObject(const QJsonObject &obj) return result; } +/*! + \overload + \since 6.3 + */ +QCborMap QCborMap::fromJsonObject(QJsonObject &&obj) noexcept +{ + QCborMap result; + result.d = std::exchange(obj.o, {}); + return result; +} + QT_END_NAMESPACE diff --git a/src/corelib/serialization/qjsonvalue.cpp b/src/corelib/serialization/qjsonvalue.cpp index 831a124f7b6..325e1db62eb 100644 --- a/src/corelib/serialization/qjsonvalue.cpp +++ b/src/corelib/serialization/qjsonvalue.cpp @@ -222,6 +222,15 @@ QJsonValue::QJsonValue(const QJsonArray &a) { } +/*! + \overload + \since 6.3 + */ +QJsonValue::QJsonValue(QJsonArray &&a) noexcept + : value(QCborArray::fromJsonArray(std::move(a))) +{ +} + /*! Creates a value of type Object, with value \a o. */ @@ -230,6 +239,15 @@ QJsonValue::QJsonValue(const QJsonObject &o) { } +/*! + \overload + \since 6.3 + */ +QJsonValue::QJsonValue(QJsonObject &&o) noexcept + : value(QCborMap::fromJsonObject(std::move(o))) +{ +} + /*! Destroys the value. diff --git a/src/corelib/serialization/qjsonvalue.h b/src/corelib/serialization/qjsonvalue.h index 4b59dede011..fe7d0baf2fc 100644 --- a/src/corelib/serialization/qjsonvalue.h +++ b/src/corelib/serialization/qjsonvalue.h @@ -81,7 +81,9 @@ public: : QJsonValue(QString::fromUtf8(s)) {} #endif QJsonValue(const QJsonArray &a); + QJsonValue(QJsonArray &&a) noexcept; QJsonValue(const QJsonObject &o); + QJsonValue(QJsonObject &&o) noexcept; ~QJsonValue();