/* This file is autogenerated. DO NOT CHANGE. All changes will be lost */

#ifndef TYPE_QPB_H
#define TYPE_QPB_H

#include "google/protobuf/source_context.qpb.h"
#include "protobufwellknowntypes_exports.qpb.h"

#include <QtProtobuf/qprotobuflazymessagepointer.h>
#include <QtProtobuf/qprotobufmessage.h>
#include <QtProtobuf/qprotobufobject.h>
#include <QtProtobuf/qtprotobuftypes.h>

#include <QtProtobufWellKnownTypes/qprotobufanysupport.h>

#include <QtCore/qbytearray.h>
#include <QtCore/qlist.h>
#include <QtCore/qmetatype.h>
#include <QtCore/qshareddata.h>
#include <QtCore/qstring.h>

namespace google::protobuf {

namespace SyntaxGadget {
Q_NAMESPACE_EXPORT(QPB_PROTOBUFWELLKNOWNTYPES_EXPORT)

enum class Syntax : int32_t {
    SYNTAX_PROTO2 = 0,
    SYNTAX_PROTO3 = 1,
    SYNTAX_EDITIONS = 2,
};
Q_ENUM_NS(Syntax)

QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void registerTypes();
} // namespace SyntaxGadget
class Type;
namespace Type_QtProtobufNested {
enum class QtProtobufFieldEnum;
} // namespace Type_QtProtobufNested

class Field;
namespace Field_QtProtobufNested {
enum class QtProtobufFieldEnum;
enum class Kind : int32_t;
enum class Cardinality : int32_t;
} // namespace Field_QtProtobufNested

class Enum;
namespace Enum_QtProtobufNested {
enum class QtProtobufFieldEnum;
} // namespace Enum_QtProtobufNested

class EnumValue;
namespace EnumValue_QtProtobufNested {
enum class QtProtobufFieldEnum;
} // namespace EnumValue_QtProtobufNested

class Option;
namespace Option_QtProtobufNested {
enum class QtProtobufFieldEnum;
} // namespace Option_QtProtobufNested

#ifdef QT_USE_PROTOBUF_LIST_ALIASES
using TypeRepeated = QList<Type>;
using FieldRepeated = QList<Field>;
using EnumRepeated = QList<Enum>;
using EnumValueRepeated = QList<EnumValue>;
using OptionRepeated = QList<Option>;
#endif // QT_USE_PROTOBUF_LIST_ALIASES

class Type_QtProtobufData;
class Type : public QProtobufMessage
{
    Q_PROTOBUF_OBJECT_EXPORT(QPB_PROTOBUFWELLKNOWNTYPES_EXPORT)
    Q_PROPERTY(QString name READ name WRITE setName SCRIPTABLE true)
    Q_PROPERTY(QList<google::protobuf::Field> fieldsData READ fields WRITE setFields SCRIPTABLE true)
    Q_PROPERTY(QStringList oneofs READ oneofs WRITE setOneofs SCRIPTABLE true)
    Q_PROPERTY(QList<google::protobuf::Option> optionsData READ options WRITE setOptions SCRIPTABLE true)
    Q_PROPERTY(google::protobuf::SourceContext *sourceContext_p READ sourceContext_p WRITE setSourceContext_p SCRIPTABLE false)
    Q_PROPERTY(bool hasSourceContext READ hasSourceContext)
    Q_PROPERTY(google::protobuf::SyntaxGadget::Syntax syntax READ syntax WRITE setSyntax SCRIPTABLE true)
    Q_PROPERTY(QString edition READ edition WRITE setEdition SCRIPTABLE true)

public:
    using QtProtobufFieldEnum = Type_QtProtobufNested::QtProtobufFieldEnum;
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Type();
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT ~Type();
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Type(const Type &other);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Type &operator =(const Type &other);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Type(Type &&other) noexcept;
    Type &operator =(Type &&other) noexcept
    {
        swap(other);
        return *this;
    }
    void swap(Type &other) noexcept
    {
        QProtobufMessage::swap(other);
        dptr.swap(other.dptr);
    }

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT const QString &name() const &;

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT const QList<Field> &fields() const &;

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT const QStringList &oneofs() const &;

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT const QList<Option> &options() const &;

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT bool hasSourceContext() const;
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT const SourceContext &sourceContext() const &;
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void clearSourceContext();

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT SyntaxGadget::Syntax syntax() const;

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT const QString &edition() const &;
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setName(const QString &name);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setName(QString &&name);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setFields(const QList<Field> &fields);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setFields(QList<Field> &&fields);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setOneofs(const QStringList &oneofs);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setOneofs(QStringList &&oneofs);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setOptions(const QList<Option> &options);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setOptions(QList<Option> &&options);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setSourceContext(const SourceContext &sourceContext);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setSourceContext(SourceContext &&sourceContext);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setSyntax(SyntaxGadget::Syntax syntax);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setEdition(const QString &edition);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setEdition(QString &&edition);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT static void registerTypes();

private:
    friend QPB_PROTOBUFWELLKNOWNTYPES_EXPORT bool comparesEqual(const Type &lhs, const Type &rhs) noexcept;
    friend bool operator==(const Type &lhs, const Type &rhs) noexcept
    {
        return comparesEqual(lhs, rhs);
    }
    friend bool operator!=(const Type &lhs, const Type &rhs) noexcept
    {
        return !comparesEqual(lhs, rhs);
    }
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT SourceContext *sourceContext_p();
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setSourceContext_p(SourceContext *sourceContext);
    QExplicitlySharedDataPointer<Type_QtProtobufData> dptr;
};
namespace Type_QtProtobufNested {
Q_NAMESPACE_EXPORT(QPB_PROTOBUFWELLKNOWNTYPES_EXPORT)

enum class QtProtobufFieldEnum {
    NameProtoFieldNumber = 1,
    FieldsProtoFieldNumber = 2,
    OneofsProtoFieldNumber = 3,
    OptionsProtoFieldNumber = 4,
    SourceContextProtoFieldNumber = 5,
    SyntaxProtoFieldNumber = 6,
    EditionProtoFieldNumber = 7,
};
Q_ENUM_NS(QtProtobufFieldEnum)

} // namespace Type_QtProtobufNested

class Field_QtProtobufData;
class Field : public QProtobufMessage
{
    Q_PROTOBUF_OBJECT_EXPORT(QPB_PROTOBUFWELLKNOWNTYPES_EXPORT)
    Q_PROPERTY(Kind kind READ kind WRITE setKind SCRIPTABLE true)
    Q_PROPERTY(Cardinality cardinality READ cardinality WRITE setCardinality SCRIPTABLE true)
    Q_PROPERTY(QtProtobuf::int32 number READ number WRITE setNumber SCRIPTABLE true)
    Q_PROPERTY(QString name READ name WRITE setName SCRIPTABLE true)
    Q_PROPERTY(QString typeUrl READ typeUrl WRITE setTypeUrl SCRIPTABLE true)
    Q_PROPERTY(QtProtobuf::int32 oneofIndex READ oneofIndex WRITE setOneofIndex SCRIPTABLE true)
    Q_PROPERTY(bool packed READ packed WRITE setPacked SCRIPTABLE true)
    Q_PROPERTY(QList<google::protobuf::Option> optionsData READ options WRITE setOptions SCRIPTABLE true)
    Q_PROPERTY(QString jsonName READ jsonName WRITE setJsonName SCRIPTABLE true)
    Q_PROPERTY(QString defaultValue READ defaultValue WRITE setDefaultValue SCRIPTABLE true)

public:
    using QtProtobufFieldEnum = Field_QtProtobufNested::QtProtobufFieldEnum;
    using Kind = Field_QtProtobufNested::Kind;
    using Cardinality = Field_QtProtobufNested::Cardinality;
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Field();
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT ~Field();
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Field(const Field &other);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Field &operator =(const Field &other);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Field(Field &&other) noexcept;
    Field &operator =(Field &&other) noexcept
    {
        swap(other);
        return *this;
    }
    void swap(Field &other) noexcept
    {
        QProtobufMessage::swap(other);
        dptr.swap(other.dptr);
    }

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Field_QtProtobufNested::Kind kind() const;

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Field_QtProtobufNested::Cardinality cardinality() const;

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT QtProtobuf::int32 number() const;

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT const QString &name() const &;

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT const QString &typeUrl() const &;

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT QtProtobuf::int32 oneofIndex() const;

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT bool packed() const;

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT const QList<Option> &options() const &;

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT const QString &jsonName() const &;

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT const QString &defaultValue() const &;
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setKind(Field_QtProtobufNested::Kind kind);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setCardinality(Field_QtProtobufNested::Cardinality cardinality);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setNumber(QtProtobuf::int32 number);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setName(const QString &name);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setName(QString &&name);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setTypeUrl(const QString &typeUrl);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setTypeUrl(QString &&typeUrl);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setOneofIndex(QtProtobuf::int32 oneofIndex);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setPacked(bool packed);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setOptions(const QList<Option> &options);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setOptions(QList<Option> &&options);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setJsonName(const QString &jsonName);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setJsonName(QString &&jsonName);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setDefaultValue(const QString &defaultValue);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setDefaultValue(QString &&defaultValue);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT static void registerTypes();

private:
    friend QPB_PROTOBUFWELLKNOWNTYPES_EXPORT bool comparesEqual(const Field &lhs, const Field &rhs) noexcept;
    friend bool operator==(const Field &lhs, const Field &rhs) noexcept
    {
        return comparesEqual(lhs, rhs);
    }
    friend bool operator!=(const Field &lhs, const Field &rhs) noexcept
    {
        return !comparesEqual(lhs, rhs);
    }
    QExplicitlySharedDataPointer<Field_QtProtobufData> dptr;
};
namespace Field_QtProtobufNested {
Q_NAMESPACE_EXPORT(QPB_PROTOBUFWELLKNOWNTYPES_EXPORT)

enum class QtProtobufFieldEnum {
    KindProtoFieldNumber = 1,
    CardinalityProtoFieldNumber = 2,
    NumberProtoFieldNumber = 3,
    NameProtoFieldNumber = 4,
    TypeUrlProtoFieldNumber = 6,
    OneofIndexProtoFieldNumber = 7,
    PackedProtoFieldNumber = 8,
    OptionsProtoFieldNumber = 9,
    JsonNameProtoFieldNumber = 10,
    DefaultValueProtoFieldNumber = 11,
};
Q_ENUM_NS(QtProtobufFieldEnum)

enum class Kind : int32_t {
    TYPE_UNKNOWN = 0,
    TYPE_DOUBLE = 1,
    TYPE_FLOAT = 2,
    TYPE_INT64 = 3,
    TYPE_UINT64 = 4,
    TYPE_INT32 = 5,
    TYPE_FIXED64 = 6,
    TYPE_FIXED32 = 7,
    TYPE_BOOL = 8,
    TYPE_STRING = 9,
    TYPE_GROUP = 10,
    TYPE_MESSAGE = 11,
    TYPE_BYTES = 12,
    TYPE_UINT32 = 13,
    TYPE_ENUM = 14,
    TYPE_SFIXED32 = 15,
    TYPE_SFIXED64 = 16,
    TYPE_SINT32 = 17,
    TYPE_SINT64 = 18,
};
Q_ENUM_NS(Kind)

enum class Cardinality : int32_t {
    CARDINALITY_UNKNOWN = 0,
    CARDINALITY_OPTIONAL = 1,
    CARDINALITY_REQUIRED = 2,
    CARDINALITY_REPEATED = 3,
};
Q_ENUM_NS(Cardinality)

} // namespace Field_QtProtobufNested

class Enum_QtProtobufData;
class Enum : public QProtobufMessage
{
    Q_PROTOBUF_OBJECT_EXPORT(QPB_PROTOBUFWELLKNOWNTYPES_EXPORT)
    Q_PROPERTY(QString name READ name WRITE setName SCRIPTABLE true)
    Q_PROPERTY(QList<google::protobuf::EnumValue> enumvalueData READ enumvalue WRITE setEnumvalue SCRIPTABLE true)
    Q_PROPERTY(QList<google::protobuf::Option> optionsData READ options WRITE setOptions SCRIPTABLE true)
    Q_PROPERTY(google::protobuf::SourceContext *sourceContext_p READ sourceContext_p WRITE setSourceContext_p SCRIPTABLE false)
    Q_PROPERTY(bool hasSourceContext READ hasSourceContext)
    Q_PROPERTY(google::protobuf::SyntaxGadget::Syntax syntax READ syntax WRITE setSyntax SCRIPTABLE true)
    Q_PROPERTY(QString edition READ edition WRITE setEdition SCRIPTABLE true)

public:
    using QtProtobufFieldEnum = Enum_QtProtobufNested::QtProtobufFieldEnum;
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Enum();
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT ~Enum();
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Enum(const Enum &other);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Enum &operator =(const Enum &other);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Enum(Enum &&other) noexcept;
    Enum &operator =(Enum &&other) noexcept
    {
        swap(other);
        return *this;
    }
    void swap(Enum &other) noexcept
    {
        QProtobufMessage::swap(other);
        dptr.swap(other.dptr);
    }

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT const QString &name() const &;

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT const QList<EnumValue> &enumvalue() const &;

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT const QList<Option> &options() const &;

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT bool hasSourceContext() const;
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT const SourceContext &sourceContext() const &;
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void clearSourceContext();

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT SyntaxGadget::Syntax syntax() const;

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT const QString &edition() const &;
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setName(const QString &name);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setName(QString &&name);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setEnumvalue(const QList<EnumValue> &enumvalue);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setEnumvalue(QList<EnumValue> &&enumvalue);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setOptions(const QList<Option> &options);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setOptions(QList<Option> &&options);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setSourceContext(const SourceContext &sourceContext);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setSourceContext(SourceContext &&sourceContext);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setSyntax(SyntaxGadget::Syntax syntax);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setEdition(const QString &edition);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setEdition(QString &&edition);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT static void registerTypes();

private:
    friend QPB_PROTOBUFWELLKNOWNTYPES_EXPORT bool comparesEqual(const Enum &lhs, const Enum &rhs) noexcept;
    friend bool operator==(const Enum &lhs, const Enum &rhs) noexcept
    {
        return comparesEqual(lhs, rhs);
    }
    friend bool operator!=(const Enum &lhs, const Enum &rhs) noexcept
    {
        return !comparesEqual(lhs, rhs);
    }
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT SourceContext *sourceContext_p();
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setSourceContext_p(SourceContext *sourceContext);
    QExplicitlySharedDataPointer<Enum_QtProtobufData> dptr;
};
namespace Enum_QtProtobufNested {
Q_NAMESPACE_EXPORT(QPB_PROTOBUFWELLKNOWNTYPES_EXPORT)

enum class QtProtobufFieldEnum {
    NameProtoFieldNumber = 1,
    EnumvalueProtoFieldNumber = 2,
    OptionsProtoFieldNumber = 3,
    SourceContextProtoFieldNumber = 4,
    SyntaxProtoFieldNumber = 5,
    EditionProtoFieldNumber = 6,
};
Q_ENUM_NS(QtProtobufFieldEnum)

} // namespace Enum_QtProtobufNested

class EnumValue_QtProtobufData;
class EnumValue : public QProtobufMessage
{
    Q_PROTOBUF_OBJECT_EXPORT(QPB_PROTOBUFWELLKNOWNTYPES_EXPORT)
    Q_PROPERTY(QString name READ name WRITE setName SCRIPTABLE true)
    Q_PROPERTY(QtProtobuf::int32 number READ number WRITE setNumber SCRIPTABLE true)
    Q_PROPERTY(QList<google::protobuf::Option> optionsData READ options WRITE setOptions SCRIPTABLE true)

public:
    using QtProtobufFieldEnum = EnumValue_QtProtobufNested::QtProtobufFieldEnum;
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT EnumValue();
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT ~EnumValue();
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT EnumValue(const EnumValue &other);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT EnumValue &operator =(const EnumValue &other);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT EnumValue(EnumValue &&other) noexcept;
    EnumValue &operator =(EnumValue &&other) noexcept
    {
        swap(other);
        return *this;
    }
    void swap(EnumValue &other) noexcept
    {
        QProtobufMessage::swap(other);
        dptr.swap(other.dptr);
    }

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT const QString &name() const &;

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT QtProtobuf::int32 number() const;

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT const QList<Option> &options() const &;
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setName(const QString &name);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setName(QString &&name);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setNumber(QtProtobuf::int32 number);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setOptions(const QList<Option> &options);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setOptions(QList<Option> &&options);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT static void registerTypes();

private:
    friend QPB_PROTOBUFWELLKNOWNTYPES_EXPORT bool comparesEqual(const EnumValue &lhs, const EnumValue &rhs) noexcept;
    friend bool operator==(const EnumValue &lhs, const EnumValue &rhs) noexcept
    {
        return comparesEqual(lhs, rhs);
    }
    friend bool operator!=(const EnumValue &lhs, const EnumValue &rhs) noexcept
    {
        return !comparesEqual(lhs, rhs);
    }
    QExplicitlySharedDataPointer<EnumValue_QtProtobufData> dptr;
};
namespace EnumValue_QtProtobufNested {
Q_NAMESPACE_EXPORT(QPB_PROTOBUFWELLKNOWNTYPES_EXPORT)

enum class QtProtobufFieldEnum {
    NameProtoFieldNumber = 1,
    NumberProtoFieldNumber = 2,
    OptionsProtoFieldNumber = 3,
};
Q_ENUM_NS(QtProtobufFieldEnum)

} // namespace EnumValue_QtProtobufNested

class Option_QtProtobufData;
class Option : public QProtobufMessage
{
    Q_PROTOBUF_OBJECT_EXPORT(QPB_PROTOBUFWELLKNOWNTYPES_EXPORT)
    Q_PROPERTY(QString name READ name WRITE setName SCRIPTABLE true)
    Q_PROPERTY(QtProtobuf::Any value READ value WRITE setValue SCRIPTABLE true)

public:
    using QtProtobufFieldEnum = Option_QtProtobufNested::QtProtobufFieldEnum;
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Option();
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT ~Option();
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Option(const Option &other);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Option &operator =(const Option &other);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Option(Option &&other) noexcept;
    Option &operator =(Option &&other) noexcept
    {
        swap(other);
        return *this;
    }
    void swap(Option &other) noexcept
    {
        QProtobufMessage::swap(other);
        dptr.swap(other.dptr);
    }

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT const QString &name() const &;

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT const QtProtobuf::Any &value() const &;
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setName(const QString &name);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setName(QString &&name);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setValue(const QtProtobuf::Any &value);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setValue(QtProtobuf::Any &&value);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT static void registerTypes();

private:
    friend QPB_PROTOBUFWELLKNOWNTYPES_EXPORT bool comparesEqual(const Option &lhs, const Option &rhs) noexcept;
    friend bool operator==(const Option &lhs, const Option &rhs) noexcept
    {
        return comparesEqual(lhs, rhs);
    }
    friend bool operator!=(const Option &lhs, const Option &rhs) noexcept
    {
        return !comparesEqual(lhs, rhs);
    }
    QExplicitlySharedDataPointer<Option_QtProtobufData> dptr;
};
namespace Option_QtProtobufNested {
Q_NAMESPACE_EXPORT(QPB_PROTOBUFWELLKNOWNTYPES_EXPORT)

enum class QtProtobufFieldEnum {
    NameProtoFieldNumber = 1,
    ValueProtoFieldNumber = 2,
};
Q_ENUM_NS(QtProtobufFieldEnum)

} // namespace Option_QtProtobufNested
} // namespace google::protobuf

#endif // TYPE_QPB_H
