diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2018-01-25 14:11:33 -0800 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2018-07-04 03:04:09 +0000 |
commit | 71e41d7230650e4b25cfe0f2ac8e3c87e8e4119e (patch) | |
tree | e0a451776b9fddd08d31b2c6fe6641cee60f51c8 /src/corelib/serialization/qcborvalue.cpp | |
parent | 9be00330af639043961f4d7b8ee1d3511e787931 (diff) |
CBOR: Add QDebug operators for the Qt CBOR value-like types
I added a function that returns the string identifiers for
QCborKnownTags and QCborSimpleType, in order to facilitate writing a
QTest::toString for those types, as neither enum is part of a Q_OBJECT
or Q_GADGET class.
Change-Id: I56b444f9d6274221a3b7fffd150d2d26a1925c19
Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
Diffstat (limited to 'src/corelib/serialization/qcborvalue.cpp')
-rw-r--r-- | src/corelib/serialization/qcborvalue.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/corelib/serialization/qcborvalue.cpp b/src/corelib/serialization/qcborvalue.cpp index 970ae23352..db5dc938df 100644 --- a/src/corelib/serialization/qcborvalue.cpp +++ b/src/corelib/serialization/qcborvalue.cpp @@ -2564,6 +2564,63 @@ inline QCborMap::QCborMap(QCborContainerPrivate &dd) Q_DECL_NOTHROW { } +#if !defined(QT_NO_DEBUG_STREAM) +static QDebug debugContents(QDebug &dbg, const QCborValue &v) +{ + switch (v.type()) { + case QCborValue::Integer: + return dbg << v.toInteger(); + case QCborValue::ByteArray: + return dbg << "QByteArray(" << v.toByteArray() << ')'; + case QCborValue::String: + return dbg << v.toString(); + case QCborValue::Array: + return dbg << v.toArray(); + case QCborValue::Map: + return dbg << v.toMap(); + case QCborValue::Tag: + dbg << v.tag() << ", "; + return debugContents(dbg, v.taggedValue()); + case QCborValue::SimpleType: + break; + case QCborValue::True: + return dbg << true; + case QCborValue::False: + return dbg << false; + case QCborValue::Null: + return dbg << "nullptr"; + case QCborValue::Undefined: + return dbg; + case QCborValue::Double: { + qint64 i = qint64(v.toDouble()); + if (i == v.toDouble()) + return dbg << i << ".0"; + else + return dbg << v.toDouble(); + } + case QCborValue::DateTime: + return dbg << v.toDateTime(); + case QCborValue::Url: + return dbg << v.toUrl(); + case QCborValue::RegularExpression: + return dbg << v.toRegularExpression(); + case QCborValue::Uuid: + return dbg << v.toUuid(); + case QCborValue::Invalid: + return dbg << "<invalid>"; + } + if (v.isSimpleType()) + return dbg << v.toSimpleType(); + return dbg << "<unknown type " << hex << int(v.type()) << '>'; +} +QDebug operator<<(QDebug dbg, const QCborValue &v) +{ + QDebugStateSaver saver(dbg); + dbg.nospace() << "QCborValue("; + return debugContents(dbg, v) << ')'; +} +#endif + QT_END_NAMESPACE #include "qcborarray.cpp" |