// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only

/*!
    \keyword Protobuf
    \page qtprotobuf-index.html
    \title Qt Protobuf
    \ingroup frameworks-technologies

    The Qt Protobuf \l {The qtprotobufgen Tool}{generator plugin} generates
    Qt-based classes from \c{.proto} files. You can use the classes to
    serialize and deserialize their associated protobuf messages.

    \section1 Overview

    \section2 What are protocol buffers?
    Protocol buffers are a language-neutral, platform-neutral, and extensible
    mechanism for serializing structured data, which is compact and easy
    to use:
    \list
        \li A user defines the structure of data in \c{.proto} files.
        \li Proto compiler is invoked at build time on \c{.proto} files to
            generate code in various programming languages.
    \endlist
    The provided format is suitable for network traffic or long-term data
    storage.

    \section2 Which problems do protocol buffers solve?
    Protocol buffers provide a serialization format for packets of typed and
    structured data that are up to a few megabytes in size. Moreover, it can
    be extended with new information without invalidating existing data or
    requiring code to be updated. For more information, see
    \l {https://protobuf.dev/}{Protocol Buffers Overview}.

    \section2 What are the benefits of using Qt Protobuf?
    You can use a Protocol buffers mechanism in any Qt-based project:
    \list
        \li No need to call a protocol buffer compiler explicitly.
        \li No need to integrate generated code into project tree manually.
        \li Convenient serialization and deserialization API.
        \li Integrated properties mechanism for generated protobuf messages.
        \li Integrated gRPC-client support (see \l {Qt GRPC}{Qt GRPC module}).
    \endlist

    \section2 Incoming features
    \list
        \li Enabling using Qt Core and Qt GUI types as a part of *.proto
            schema.
        \li Enabling gRPC-server support.
        \li Enabling QML-types support for generated protobuf messages.
    \endlist

    \section1 Using Qt Protobuf
    Google protocol buffers provide a generator called \c protoc that
    supports extensions. \l {The qtprotobufgen Tool} is an extension
    for \c protoc and requires that you install \c protoc on your host system.
    For more information about the installation, see
    \l {https://grpc.io/docs/protoc-installation/}{Protoc Installation}.

    Example of installation for Linux, using \e {apt}:
    \badcode
    apt install -y protobuf-compiler
    protoc --version  # Ensure compiler version is 3+
    \endcode
    For more information about component API usage, see \e {CMake API}.

    \section1 CMake API
    \list
        \li \l{CMake Commands in Qt6 Protobuf}
    \endlist

    \section1 Class Documentation

    \list
        \l {Qt Protobuf C++ Classes}{C++ Classes}
    \endlist

    \section1 Examples

    \list
        \li \l {Qt Protobuf Examples}
    \endlist
*/

/*!
    \module QtProtobuf
    \modulestate Technical Preview
    \title Qt Protobuf C++ Classes
    \qtcmakepackage Protobuf
    \since 6.5
    \brief Provides protocol buffers support in Qt.
*/

/*!
    \group qtprotobuf-examples
    \keyword Qt Protobuf Examples
    \title Qt Protobuf Examples
    \brief A collection of examples for \l {Qt Protobuf}

    These examples demonstrate how to generate code using the protobuf schema
    and use it in your projects.
*/
