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

#ifndef QPROTOBUF_TYPE_H
#define QPROTOBUF_TYPE_H

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

#include <QtCore/qbytearray.h>
#include <QtCore/qstring.h>
#include <QtProtobufWellKnownTypes/qprotobufanysupport.h>
#include "google/protobuf/source_context.qpb.h"
#include "protobufwellknowntypes_exports.qpb.h"

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

#include <memory>


namespace google::protobuf {

namespace SyntaxGadget {
Q_NAMESPACE_EXPORT(QPB_PROTOBUFWELLKNOWNTYPES_EXPORT)

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

using SyntaxRepeated = QList<Syntax>;
QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void registerTypes();
} // namespace SyntaxGadget
class Type;
using TypeRepeated = QList<Type>;
namespace Type_QtProtobufNested {
enum class QtProtobufFieldEnum;
} // namespace Type_QtProtobufNested

class Field;
using FieldRepeated = QList<Field>;
namespace Field_QtProtobufNested {
enum class QtProtobufFieldEnum;
enum Kind : int32_t;
using KindRepeated = QList<Kind>;
enum Cardinality : int32_t;
using CardinalityRepeated = QList<Cardinality>;
} // namespace Field_QtProtobufNested

class Enum;
using EnumRepeated = QList<Enum>;
namespace Enum_QtProtobufNested {
enum class QtProtobufFieldEnum;
} // namespace Enum_QtProtobufNested

class EnumValue;
using EnumValueRepeated = QList<EnumValue>;
namespace EnumValue_QtProtobufNested {
enum class QtProtobufFieldEnum;
} // namespace EnumValue_QtProtobufNested

class Option;
using OptionRepeated = QList<Option>;
namespace Option_QtProtobufNested {
enum class QtProtobufFieldEnum;
} // namespace Option_QtProtobufNested


class Type_QtProtobufData;
class QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Type : public QProtobufMessage
{
    Q_GADGET
    Q_PROTOBUF_OBJECT
    Q_DECLARE_PROTOBUF_SERIALIZERS(Type)
    Q_PROPERTY(QString name READ name WRITE setName SCRIPTABLE true)
    Q_PROPERTY(google::protobuf::FieldRepeated fieldsData READ fields WRITE setFields SCRIPTABLE true)
    Q_PROPERTY(QStringList oneofs READ oneofs WRITE setOneofs SCRIPTABLE true)
    Q_PROPERTY(google::protobuf::OptionRepeated optionsData READ options WRITE setOptions SCRIPTABLE true)
    Q_PROPERTY(google::protobuf::SourceContext *sourceContext_p READ sourceContext_p WRITE setSourceContext_p SCRIPTABLE false)
    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;
    Type();
    ~Type();
    Type(const Type &other);
    Type &operator =(const Type &other);
    Type(Type &&other) noexcept;
    Type &operator =(Type &&other) noexcept;
    bool operator ==(const Type &other) const;
    bool operator !=(const Type &other) const;

    QString name() const;

    FieldRepeated fields() const;
    FieldRepeated &fields();

    QStringList oneofs() const;
    QStringList &oneofs();

    OptionRepeated options() const;
    OptionRepeated &options();

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

    SyntaxGadget::Syntax syntax() const;

    QString edition() const;
    void setName(const QString &name);
    void setFields(const FieldRepeated &fields);
    void setOneofs(const QStringList &oneofs);
    void setOptions(const OptionRepeated &options);
    void setSourceContext(const SourceContext &sourceContext);
    void setSyntax(const SyntaxGadget::Syntax &syntax);
    void setEdition(const QString &edition);
    static void registerTypes();

private:
    SourceContext *sourceContext_p() const;
    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 QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Field : public QProtobufMessage
{
    Q_GADGET
    Q_PROTOBUF_OBJECT
    Q_DECLARE_PROTOBUF_SERIALIZERS(Field)
    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(google::protobuf::OptionRepeated 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 KindRepeated = QList<Kind>;
    using Cardinality = Field_QtProtobufNested::Cardinality;
    using CardinalityRepeated = QList<Cardinality>;
    Field();
    ~Field();
    Field(const Field &other);
    Field &operator =(const Field &other);
    Field(Field &&other) noexcept;
    Field &operator =(Field &&other) noexcept;
    bool operator ==(const Field &other) const;
    bool operator !=(const Field &other) const;

    Field_QtProtobufNested::Kind kind() const;

    Field_QtProtobufNested::Cardinality cardinality() const;

    QtProtobuf::int32 number() const;

    QString name() const;

    QString typeUrl() const;

    QtProtobuf::int32 oneofIndex() const;

    bool packed() const;

    OptionRepeated options() const;
    OptionRepeated &options();

    QString jsonName() const;

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

private:
    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 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)

using KindRepeated = QList<Kind>;
enum Cardinality : int32_t {
    CARDINALITY_UNKNOWN = 0,
    CARDINALITY_OPTIONAL = 1,
    CARDINALITY_REQUIRED = 2,
    CARDINALITY_REPEATED = 3,
};
Q_ENUM_NS(Cardinality)

using CardinalityRepeated = QList<Cardinality>;
} // namespace Field_QtProtobufNested

class Enum_QtProtobufData;
class QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Enum : public QProtobufMessage
{
    Q_GADGET
    Q_PROTOBUF_OBJECT
    Q_DECLARE_PROTOBUF_SERIALIZERS(Enum)
    Q_PROPERTY(QString name READ name WRITE setName SCRIPTABLE true)
    Q_PROPERTY(google::protobuf::EnumValueRepeated enumvalueData READ enumvalue WRITE setEnumvalue SCRIPTABLE true)
    Q_PROPERTY(google::protobuf::OptionRepeated optionsData READ options WRITE setOptions SCRIPTABLE true)
    Q_PROPERTY(google::protobuf::SourceContext *sourceContext_p READ sourceContext_p WRITE setSourceContext_p SCRIPTABLE false)
    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;
    Enum();
    ~Enum();
    Enum(const Enum &other);
    Enum &operator =(const Enum &other);
    Enum(Enum &&other) noexcept;
    Enum &operator =(Enum &&other) noexcept;
    bool operator ==(const Enum &other) const;
    bool operator !=(const Enum &other) const;

    QString name() const;

    EnumValueRepeated enumvalue() const;
    EnumValueRepeated &enumvalue();

    OptionRepeated options() const;
    OptionRepeated &options();

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

    SyntaxGadget::Syntax syntax() const;

    QString edition() const;
    void setName(const QString &name);
    void setEnumvalue(const EnumValueRepeated &enumvalue);
    void setOptions(const OptionRepeated &options);
    void setSourceContext(const SourceContext &sourceContext);
    void setSyntax(const SyntaxGadget::Syntax &syntax);
    void setEdition(const QString &edition);
    static void registerTypes();

private:
    SourceContext *sourceContext_p() const;
    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 QPB_PROTOBUFWELLKNOWNTYPES_EXPORT EnumValue : public QProtobufMessage
{
    Q_GADGET
    Q_PROTOBUF_OBJECT
    Q_DECLARE_PROTOBUF_SERIALIZERS(EnumValue)
    Q_PROPERTY(QString name READ name WRITE setName SCRIPTABLE true)
    Q_PROPERTY(QtProtobuf::int32 number READ number WRITE setNumber SCRIPTABLE true)
    Q_PROPERTY(google::protobuf::OptionRepeated optionsData READ options WRITE setOptions SCRIPTABLE true)

public:
    using QtProtobufFieldEnum = EnumValue_QtProtobufNested::QtProtobufFieldEnum;
    EnumValue();
    ~EnumValue();
    EnumValue(const EnumValue &other);
    EnumValue &operator =(const EnumValue &other);
    EnumValue(EnumValue &&other) noexcept;
    EnumValue &operator =(EnumValue &&other) noexcept;
    bool operator ==(const EnumValue &other) const;
    bool operator !=(const EnumValue &other) const;

    QString name() const;

    QtProtobuf::int32 number() const;

    OptionRepeated options() const;
    OptionRepeated &options();
    void setName(const QString &name);
    void setNumber(const QtProtobuf::int32 &number);
    void setOptions(const OptionRepeated &options);
    static void registerTypes();

private:
    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 QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Option : public QProtobufMessage
{
    Q_GADGET
    Q_PROTOBUF_OBJECT
    Q_DECLARE_PROTOBUF_SERIALIZERS(Option)
    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;
    Option();
    ~Option();
    Option(const Option &other);
    Option &operator =(const Option &other);
    Option(Option &&other) noexcept;
    Option &operator =(Option &&other) noexcept;
    bool operator ==(const Option &other) const;
    bool operator !=(const Option &other) const;

    QString name() const;

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

private:
    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

Q_DECLARE_METATYPE(google::protobuf::Type)
Q_DECLARE_METATYPE(google::protobuf::Field)
Q_DECLARE_METATYPE(google::protobuf::Enum)
Q_DECLARE_METATYPE(google::protobuf::EnumValue)
Q_DECLARE_METATYPE(google::protobuf::Option)
#endif // QPROTOBUF_TYPE_H
