From 192df6ef4772535b110957eb684da72237f9a510 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98ystein=20Heskestad?= Date: Wed, 24 Aug 2022 17:54:37 +0200 Subject: [PATCH] Add CBOR documentation Add documentation of usage of CBOR in convert and cbordump examples, add a CBOR overview, and add links to them other places in the documentation. Task-number: QTBUG-85912 Change-Id: I518792db63647bf9ddd4507d8d4b7ef056192f82 Reviewed-by: Mitch Curtis (cherry picked from commit 855a9ca217ad3b9d8eb8f6544698a174323843fc) Reviewed-by: Ievgenii Meshcheriakov --- .../cbordump/doc/images/cbordump.png | Bin 0 -> 48004 bytes .../cbordump/doc/src/cbordump.qdoc | 52 ++++++++++++ .../corelib/serialization/cbordump/main.cpp | 2 + .../serialization/convert/cborconverter.cpp | 14 ++- .../convert/doc/images/convert.png | Bin 0 -> 49201 bytes .../convert/doc/src/convert.qdoc | 80 ++++++++++++++++++ .../savegame/doc/src/savegame.qdoc | 2 +- src/corelib/doc/src/cbor.qdoc | 78 +++++++++++++++++ src/corelib/doc/src/datastreamformat.qdoc | 3 +- src/corelib/doc/src/qtcore-index.qdoc | 1 + src/corelib/serialization/qcborarray.cpp | 3 +- src/corelib/serialization/qcborcommon.cpp | 1 + src/corelib/serialization/qcbormap.cpp | 3 +- .../serialization/qcborstreamreader.cpp | 3 +- .../serialization/qcborstreamwriter.cpp | 1 + src/corelib/serialization/qcborvalue.cpp | 3 +- 16 files changed, 236 insertions(+), 10 deletions(-) create mode 100644 examples/corelib/serialization/cbordump/doc/images/cbordump.png create mode 100644 examples/corelib/serialization/cbordump/doc/src/cbordump.qdoc create mode 100644 examples/corelib/serialization/convert/doc/images/convert.png create mode 100644 examples/corelib/serialization/convert/doc/src/convert.qdoc create mode 100644 src/corelib/doc/src/cbor.qdoc diff --git a/examples/corelib/serialization/cbordump/doc/images/cbordump.png b/examples/corelib/serialization/cbordump/doc/images/cbordump.png new file mode 100644 index 0000000000000000000000000000000000000000..72232c1a95670a9df6bfaca62e8c2e00b64d4e8f GIT binary patch literal 48004 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 DFDA;E literal 0 HcmV?d00001 diff --git a/examples/corelib/serialization/cbordump/doc/src/cbordump.qdoc b/examples/corelib/serialization/cbordump/doc/src/cbordump.qdoc new file mode 100644 index 00000000000..c3565e184db --- /dev/null +++ b/examples/corelib/serialization/cbordump/doc/src/cbordump.qdoc @@ -0,0 +1,52 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only + +/*! + \example serialization/cbordump + \title Cbordump Example + + \brief The Cbordump example demonstrates how to parse files in CBOR-format. + + The Cbordump example reads from files or stdin content in CBOR-format and + dumps the decoded content to stdout. The cbordump utility can output in + CBOR diagnostic notation (which is similar to JSON), or it can have a + verbose output where each byte input is displayed with the encoding beside + it. This example shows how to use the QCborStreamReader class directly to + parse CBOR content. + + \sa QCborStreamReader + + \image cbordump.png + + \section1 The Cbordumper Class + + The Cbordumper class contains a QCborStreamReader object that is + initialized using the QFile object argument passed to the CborDumper + constructor. Based on the arguments the dump function calls either + dumpOne() or dumpOneDetailed() to dump the contents to stdout, + + \snippet serialization/cbordump/main.cpp 0 + + \section2 The dumpOne() Function + + The type() function of the QCborStreamReader is used in a switch statement + to print out for each type. If the type is an array or map, the content is + iterated upon, and for each entry the dumpOne() function is called + recursively with a higher indentation argument. If the type is a tag, it + is printed out and dumpOne() is called once without increasing the + indentation argument. + + \section2 The dumpOneDetailed() Function + + This function dumps out both the incoming bytes and the decoded contents + on the same line. It uses lambda functions to print out the bytes and + decoded content, but otherwise has a similar structure as dumpOne(). + + \section1 CborDescription + + The tagDescriptions table, describing the CBOR-tags available, is + automatically generated from an XML-file available from the iana.org + website. + + \sa {CBOR Support in Qt} + */ diff --git a/examples/corelib/serialization/cbordump/main.cpp b/examples/corelib/serialization/cbordump/main.cpp index 126a5c58337..16ff27d7015 100644 --- a/examples/corelib/serialization/cbordump/main.cpp +++ b/examples/corelib/serialization/cbordump/main.cpp @@ -87,6 +87,7 @@ enum { Value64Bit = 27 }; +//! [0] struct CborDumper { enum DumpOption { @@ -113,6 +114,7 @@ private: qint64 offset = 0; DumpOptions opts; }; +//! [0] Q_DECLARE_OPERATORS_FOR_FLAGS(CborDumper::DumpOptions) static int cborNumberSize(quint64 value) diff --git a/examples/corelib/serialization/convert/cborconverter.cpp b/examples/corelib/serialization/convert/cborconverter.cpp index 0f49de25518..8c88d42af3a 100644 --- a/examples/corelib/serialization/convert/cborconverter.cpp +++ b/examples/corelib/serialization/convert/cborconverter.cpp @@ -57,6 +57,7 @@ QT_END_NAMESPACE static QVariant convertCborValue(const QCborValue &value); +//! [0] static QVariant convertCborMap(const QCborMap &map) { VariantOrderedMap result; @@ -83,8 +84,9 @@ static QVariant convertCborValue(const QCborValue &value) return convertCborMap(value.toMap()); return value.toVariant(); } - +//! [0] enum TrimFloatingPoint { Double, Float, Float16 }; +//! [1] static QCborValue convertFromVariant(const QVariant &v, TrimFloatingPoint fpTrimming) { if (v.userType() == QMetaType::QVariantList) { @@ -114,6 +116,7 @@ static QCborValue convertFromVariant(const QVariant &v, TrimFloatingPoint fpTrim return QCborValue::fromVariant(v); } +//! [1] QString CborDiagnosticDumper::name() { @@ -216,6 +219,7 @@ bool CborConverter::probeFile(QIODevice *f) return f->isReadable() && f->peek(3) == QByteArray("\xd9\xd9\xf7", 3); } +//! [2] QVariant CborConverter::loadFile(QIODevice *f, Converter *&outputConverter) { const char *ptr = nullptr; @@ -250,9 +254,11 @@ QVariant CborConverter::loadFile(QIODevice *f, Converter *&outputConverter) return contents.toVariant(); return convertCborValue(contents); } - +//! [2] +//! [3] void CborConverter::saveFile(QIODevice *f, const QVariant &contents, const QStringList &options) { + //! [3] bool useSignature = true; bool useIntegers = true; enum { Yes, No, Always } useFloat16 = Yes, useFloat = Yes; @@ -311,7 +317,7 @@ void CborConverter::saveFile(QIODevice *f, const QVariant &contents, const QStri qPrintable(s), optionHelp); exit(EXIT_FAILURE); } - + //! [4] QCborValue v = convertFromVariant(contents, useFloat16 == Always ? Float16 : useFloat == Always ? Float : Double); QCborStreamWriter writer(f); @@ -327,4 +333,4 @@ void CborConverter::saveFile(QIODevice *f, const QVariant &contents, const QStri opts |= QCborValue::UseFloat16; v.toCbor(writer, opts); } - +//! [4] diff --git a/examples/corelib/serialization/convert/doc/images/convert.png b/examples/corelib/serialization/convert/doc/images/convert.png new file mode 100644 index 0000000000000000000000000000000000000000..8d6816a6262baa144a58afb0e45bd053cf8321ab GIT binary patch literal 49201 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 literal 0 HcmV?d00001 diff --git a/examples/corelib/serialization/convert/doc/src/convert.qdoc b/examples/corelib/serialization/convert/doc/src/convert.qdoc new file mode 100644 index 00000000000..dc3264a4692 --- /dev/null +++ b/examples/corelib/serialization/convert/doc/src/convert.qdoc @@ -0,0 +1,80 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only + +/*! + \example serialization/convert + \title Convert Example + + \brief The Convert example demonstrates how to convert between different + serialization formats. + + The Convert example converts between the serialization formats JSON, CBOR, + XML, QDataStream and text. It can also auto detect the format being used. + Not all formats support both input and output, and they have different + sets of which types they support. QDataStream and XML are the richest, + followed by CBOR, then JSON, and then the plain text one. + + \image convert.png + + \section1 The Converter Class + + The Converter class is the abstract superclass for all the converters to + and from all the formats. They all convert to and from the QVariant class, + which is used to represent all the datastructures internally. + The name() function returns the name of the converter. The directions() + function is used to determine if a converter can be used for input, output, + or both. The outputOptions() and optionsHelp() functions are used to get + and query which options are used by the different converters. The + probeFile() function is used to determine if a file has the same file + format as the converter. The loadFile() function deserializes the given + file, while the saveFile() serializes to the given file. + + \section1 The CborConverter Class + + The CborConverter class shows how to serialize to and from the CBOR-format. + There is also a CborDiagnosticDumper class to output in CBOR diagnostic + notation. That is similar to JSON, but not exactly, because it allows + displaying the contents of a CBOR stream losslessly, while a conversion + to JSON is lossy. + + The convertCborValue() function is used to convert a QCborValue to a + QVariant. It uses the helper functions convertCborMap() and + convertCborArray(). + \snippet serialization/convert/cborconverter.cpp 0 + + A CBOR-file is read using loadFile() function. + \snippet serialization/convert/cborconverter.cpp 2 + + The convertFromVariant() function is used to convert a QVariant to a + QCborValue. + \snippet serialization/convert/cborconverter.cpp 1 + + A CBOR-file is written using the saveFile() function. + \snippet serialization/convert/cborconverter.cpp 3 + \snippet serialization/convert/cborconverter.cpp 4 + + \sa {CBOR Support in Qt} + + \section1 The DataStreamConverter Class + + The DataStreamConverter class is used to serialize to and from the + QDataStream format. There is also the DataStreamDumper class for outputting + the data lossless in a non-standardized human readable format. + + \section1 The JsonConverter Class + + The JsonConverter class is used to serialize to and from the JSON-format. + \sa {JSON Support in Qt} + + \section1 The XmlConverter Class + + The XmlConverter class is used to serialize to and from the XML-format. + + \section1 The TextConverter Class + + The TextConverter class is used to serialize to and from a text format. + + \section1 The NullConverter Class + + The NullConverter class is an output serializer that does nothing. +*/ diff --git a/examples/corelib/serialization/savegame/doc/src/savegame.qdoc b/examples/corelib/serialization/savegame/doc/src/savegame.qdoc index 0246ae48bbe..233c81dd8b1 100644 --- a/examples/corelib/serialization/savegame/doc/src/savegame.qdoc +++ b/examples/corelib/serialization/savegame/doc/src/savegame.qdoc @@ -158,5 +158,5 @@ human-readable JSON files, but you also have the option to use a binary format if it's required, \e without rewriting any code. - \sa {JSON Support in Qt}, {Data Storage} + \sa {JSON Support in Qt}, {CBOR Support in Qt}, {Data Storage} */ diff --git a/src/corelib/doc/src/cbor.qdoc b/src/corelib/doc/src/cbor.qdoc new file mode 100644 index 00000000000..22252bbd88d --- /dev/null +++ b/src/corelib/doc/src/cbor.qdoc @@ -0,0 +1,78 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only + +/*! + \group cbor + \title CBOR Support in Qt + \ingroup qt-basic-concepts + \brief An overview of CBOR support in Qt. + + \ingroup frameworks-technologies + + \keyword CBOR + + Qt provides support for dealing with CBOR data. CBOR is a binary format to + store data that has a superset of the types available in JSON, but is more + compact. + + The CBOR support in Qt provides an easy to use C++ API to parse, + modify and save CBOR data. + + More details about the CBOR data format can be found in \l {RFC 7049}. + + \tableofcontents + + \section1 Overview + + CBOR is a format to store structured data. It has three groups of built-in types: + + \list + \li Basic types: integers, floating point, boolean, null, etc. + \li String-like types: strings and byte arrays + \li Containers: arrays and maps + \endlist + + In addition, CBOR can add a "tag" to extend the meaning of the type. The + container types can contain basic types, string-like types and containers. + + \sa {Cbordump Example}, {Convert Example}, {JSON Save Game Example} + + \section1 The CBOR Classes + + \section2 The QCborValue Class + + The QCborValue class represents any CBOR type. It also has a simple API for + reading and writing to QCborStreamReader and QCborStreamWriter objects, as + well as manipulating such objects in memory, with the help of QCborArray + and QCborMap. The CborValue API is simplified from the full CBOR data type + and always represents all integers as \l qint64 and all floating-point as + \c double. This means QCborValue is unable to represent CBOR integer values + outside of the range of \l qint64 (-2^63 to 2^63-1). When creating a CBOR + stream, QCborValue::toCbor() can be configured to attempt to write the + shorter single- and half-precision floating-point representations. + + \section2 The QCborArray Class + + The QCborArray class is used to hold an array of QCborValue objects. A + QCborValue object can contain a QCborArray object. It has functions for + converting to and from QVariantList, QStringList, QJsonArray. + + \section2 The QCborMap Class + + The QCborMap class is used to hold an map of QCborValue objects. A + QCborValue object can contain a QCborMap object. It has functions for + converting to and from QVariantMap, QVariantMap, and QJsonObject, but it + can have keys of any type, not just QString. + + \section2 The QCborStreamReader Class + + The QCborStreamReader class is a low level API for reading CBOR data from a + QIODevice, a QByteArray, or a pointer to memory. It has an API similar to + the QXmlStreamReader class. + + \section2 The QCborStreamWriter Class + + The QCborStreamWriter class is a low level API for writing CBOR data to a + QIODevice or a QByteArray. It has an API similar to the QXmlStreamWriter + class. +*/ diff --git a/src/corelib/doc/src/datastreamformat.qdoc b/src/corelib/doc/src/datastreamformat.qdoc index c3e57a9adf3..60ea1aa495e 100644 --- a/src/corelib/doc/src/datastreamformat.qdoc +++ b/src/corelib/doc/src/datastreamformat.qdoc @@ -67,5 +67,6 @@ \li QVector4D \endlist - \sa {JSON Support in Qt} + \sa {JSON Support in Qt}, {CBOR Support in Qt} + */ diff --git a/src/corelib/doc/src/qtcore-index.qdoc b/src/corelib/doc/src/qtcore-index.qdoc index 377e1997847..99cc114d64d 100644 --- a/src/corelib/doc/src/qtcore-index.qdoc +++ b/src/corelib/doc/src/qtcore-index.qdoc @@ -75,6 +75,7 @@ \list \li \l{The Animation Framework} \li \l{JSON Support in Qt} + \li \l{CBOR Support in Qt} \li \l{How to Create Qt Plugins} \li \l{The Event System} \endlist diff --git a/src/corelib/serialization/qcborarray.cpp b/src/corelib/serialization/qcborarray.cpp index e9d31b4cc3a..91644fe2ea9 100644 --- a/src/corelib/serialization/qcborarray.cpp +++ b/src/corelib/serialization/qcborarray.cpp @@ -30,7 +30,8 @@ using namespace QtCbor; from those two, though there may be loss of information in some conversions. - \sa QCborValue, QCborMap, QJsonArray, QList + \sa QCborValue, QCborMap, QJsonArray, QList, {Cbordump Example}, + {Convert Example}, {JSON Save Game Example} */ /*! diff --git a/src/corelib/serialization/qcborcommon.cpp b/src/corelib/serialization/qcborcommon.cpp index 648ca59d8b3..9168b8c5203 100644 --- a/src/corelib/serialization/qcborcommon.cpp +++ b/src/corelib/serialization/qcborcommon.cpp @@ -179,6 +179,7 @@ QDataStream &operator>>(QDataStream &ds, QCborSimpleType &st) validating a CBOR stream. \sa QCborStreamReader, QCborValue, QCborParserError + \sa {Cbordump Example}, {Convert Example}, {JSON Save Game Example} */ /*! diff --git a/src/corelib/serialization/qcbormap.cpp b/src/corelib/serialization/qcbormap.cpp index 050565d5aec..dcb4299027d 100644 --- a/src/corelib/serialization/qcbormap.cpp +++ b/src/corelib/serialization/qcbormap.cpp @@ -46,7 +46,8 @@ using namespace QtCbor; stringified using a one-way method that the conversion back to QCborMap will not undo. - \sa QCborArray, QCborValue, QJsonDocument, QVariantMap + \sa QCborArray, QCborValue, QJsonDocument, QVariantMap, {Cbordump Example} + \sa {Convert Example}, {JSON Save Game Example} */ /*! diff --git a/src/corelib/serialization/qcborstreamreader.cpp b/src/corelib/serialization/qcborstreamreader.cpp index 10b3eb2d45d..65edd3a9416 100644 --- a/src/corelib/serialization/qcborstreamreader.cpp +++ b/src/corelib/serialization/qcborstreamreader.cpp @@ -151,7 +151,8 @@ static_assert(int(QCborStreamReader::Invalid) == CborInvalidType); parsing from a QByteArray, or reparse(), if it is instead reading directly a the QIDOevice that now has more data available (see setDevice()). - \sa QCborStreamWriter, QCborValue, QXmlStreamReader + \sa QCborStreamWriter, QCborValue, QXmlStreamReader, {Cbordump Example} + \sa {Convert Example}, {JSON Save Game Example} */ /*! diff --git a/src/corelib/serialization/qcborstreamwriter.cpp b/src/corelib/serialization/qcborstreamwriter.cpp index 9f7e30e8cb3..0e445451bc2 100644 --- a/src/corelib/serialization/qcborstreamwriter.cpp +++ b/src/corelib/serialization/qcborstreamwriter.cpp @@ -175,6 +175,7 @@ Q_DECLARE_TYPEINFO(CborEncoder, Q_PRIMITIVE_TYPE); \endlist \sa QCborStreamReader, QCborValue, QXmlStreamWriter + \sa {Cbordump Example}, {Convert Example}, {JSON Save Game Example} */ class QCborStreamWriterPrivate diff --git a/src/corelib/serialization/qcborvalue.cpp b/src/corelib/serialization/qcborvalue.cpp index 056e8c07b6f..59a8007b810 100644 --- a/src/corelib/serialization/qcborvalue.cpp +++ b/src/corelib/serialization/qcborvalue.cpp @@ -189,7 +189,8 @@ Q_DECL_UNUSED static constexpr quint64 MaximumPreallocatedElementCount = aspects, its API is identical to QCborValue. \sa QCborArray, QCborMap, QCborStreamReader, QCborStreamWriter - QJsonValue, QJsonDocument + \sa QJsonValue, QJsonDocument, {Cbordump Example}, {Convert Example} + \sa {JSON Save Game Example} */ /*!