- Qt 6.6
- Qt Protobuf
- C++ Classes
- QtProtobuf (Technical Preview)
- QAbstractProtobufSerializer
- Qt 6.6.3 Reference Documentation

# QAbstractProtobufSerializer Class

The QAbstractProtobufSerializer class is interface that represents basic functions for serialization/deserialization. More...

Header: | #include <QAbstractProtobufSerializer>
CMake: | find_package(Qt6 REQUIRED COMPONENTS Protobuf) target_link_libraries(mytarget PRIVATE Qt6::Protobuf)
Since: | Qt 6.5
Inherited By: | QProtobufSerializer
Status: | Technical Preview

- List of all members, including inherited members

Note: All functions in this class are reentrant.

## Public Types

enum | DeserializationError { NoError, InvalidHeaderError, NoDeserializerError, UnexpectedEndOfStreamError }

## Public Functions

virtual | ~QAbstractProtobufSerializer()
bool | deserialize(T *object, QByteArrayView data) const
QByteArray | serialize(const QProtobufMessage *message) const

## Protected Functions

virtual bool | deserializeMessage(QProtobufMessage *message, const QtProtobufPrivate::QProtobufPropertyOrdering &ordering, QByteArrayView data) const = 0
virtual QByteArray | serializeMessage(const QProtobufMessage *message, const QtProtobufPrivate::QProtobufPropertyOrdering &ordering) const = 0

## Macros

| Q_DECLARE_PROTOBUF_SERIALIZERS(Type)
| Q_PROTOBUF_OBJECT

## Detailed Description

The QProtobufSerializer class registers serializers/deserializers for classes implementing a protobuf message, inheriting QProtobufMessage. These classes are generated automatically, based on a `.proto` file, using the CMake function qt_add_protobuf or by running qtprotobufgen directly.

This class should be used as a base for specific serializers. The handlers property contains all message-specific serializers and should be used while serialization/deserialization. Inherited classes should reimplement scope of virtual methods that used by registered message serialization/deserialization functions.

## Member Type Documentation

### enum QAbstractProtobufSerializer::DeserializationError

This enum contains possible errors that can occur during deserialization. When an error occurs, call deserializationErrorString() to get a human-readable error message.

Constant | Value | Description
--- | --- | ---
`QAbstractProtobufSerializer::NoError` | `0` | No error occurred.
`QAbstractProtobufSerializer::InvalidHeaderError` | `1` | Something went wrong while attempting to decode a header in the message.
`QAbstractProtobufSerializer::NoDeserializerError` | `2` | While deserializing a message, no deserializer was found for a type in the message.
`QAbstractProtobufSerializer::UnexpectedEndOfStreamError` | `3` | While deserializing a message, the stream ended unexpectedly.

## Member Function Documentation

### `[virtual noexcept]` QAbstractProtobufSerializer::~QAbstractProtobufSerializer()

Destroys this QAbstractProtobufSerializer.

### template <typename T> bool QAbstractProtobufSerializer::deserialize(T *object, QByteArrayView data) const

This function deserializes a registered Protobuf message object from a QByteArray data. object must not be `nullptr`. Returns `true` if deserialization was successful, otherwise `false`.

For a given type, `T`, you should call the `deserialize()` function on an instance of that type, which in turn will call this function for you.

Unexpected/unknown properties in the data are skipped.

See also serialize().

### `[pure virtual protected]` bool QAbstractProtobufSerializer::deserializeMessage(QProtobufMessage *message, const QtProtobufPrivate::QProtobufPropertyOrdering &ordering, QByteArrayView data) const

This is called by deserialize() to deserialize a registered Protobuf message message with ordering from a QByteArrayView data. message can be assumed to not be `nullptr`. Returns `true` if deserialization was successful, otherwise `false`.

### template <typename T> QByteArray QAbstractProtobufSerializer::serialize(const QProtobufMessage *message) const

This function serializes a registered Protobuf message message into a QByteArray. message must not be `nullptr`.

For a given type, `T`, you should call the `serialize()` function on an instance of that type, which in turn will call this function for you.

See also deserialize().

### `[pure virtual protected]` QByteArray QAbstractProtobufSerializer::serializeMessage(const QProtobufMessage *message, const QtProtobufPrivate::QProtobufPropertyOrdering &ordering) const

This is called by serialize() to serialize a registered Protobuf message message with ordering. message must not be `nullptr`. Returns a QByteArray containing the serialized message.

## Macro Documentation

### Q_DECLARE_PROTOBUF_SERIALIZERS(Type)

Defines serialize and deserialize functions for a Type inheriting QProtobufMessage. This is used as part of the code generated by the qtprotobufgen tool.

### Q_PROTOBUF_OBJECT

Declares the propertyOrdering member in a class inheriting QProtobufMessage. This is used as part of the code generated by the qtprotobufgen tool.