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

#ifndef QPROTOBUF_STRUCT_H
#define QPROTOBUF_STRUCT_H

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

#include <QtCore/qbytearray.h>
#include <QtCore/qstring.h>
#include <QtProtobuf/qprotobufoneof.h>
#include "protobufwellknowntypes_exports.qpb.h"

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


namespace google::protobuf {

namespace NullValueGadget {
Q_NAMESPACE_EXPORT(QPB_PROTOBUFWELLKNOWNTYPES_EXPORT)

enum NullValue : int32_t {
    NULL_VALUE = 0,
};
Q_ENUM_NS(NullValue)

using NullValueRepeated = QList<NullValue>;
QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void registerTypes();
} // namespace NullValueGadget
class Struct;
using StructRepeated = QList<Struct>;
namespace Struct_QtProtobufNested {
enum class QtProtobufFieldEnum;
} // namespace Struct_QtProtobufNested

class Value;
using ValueRepeated = QList<Value>;
namespace Value_QtProtobufNested {
enum class QtProtobufFieldEnum;
enum class KindFields;
} // namespace Value_QtProtobufNested

class ListValue;
using ListValueRepeated = QList<ListValue>;
namespace ListValue_QtProtobufNested {
enum class QtProtobufFieldEnum;
} // namespace ListValue_QtProtobufNested


class Struct_QtProtobufData;
class QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Struct : public QProtobufMessage
{
    Q_PROTOBUF_OBJECT
    Q_PROPERTY(google::protobuf::Struct::FieldsEntry fields READ fields WRITE setFields SCRIPTABLE true)

public:
    using QtProtobufFieldEnum = Struct_QtProtobufNested::QtProtobufFieldEnum;
    using FieldsEntry = QHash<QString, Value>;
    Struct();
    ~Struct();
    Struct(const Struct &other);
    Struct &operator =(const Struct &other);
    Struct(Struct &&other) noexcept;
    Struct &operator =(Struct &&other) noexcept;

    Struct::FieldsEntry fields() const;
    Struct::FieldsEntry &fields();
    void setFields(const Struct::FieldsEntry &fields);
    static void registerTypes();

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

enum class QtProtobufFieldEnum {
    FieldsProtoFieldNumber = 1,
};
Q_ENUM_NS(QtProtobufFieldEnum)

} // namespace Struct_QtProtobufNested

class Value_QtProtobufData;
class QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Value : public QProtobufMessage
{
    Q_PROTOBUF_OBJECT
    Q_PROPERTY(google::protobuf::NullValueGadget::NullValue nullValue READ nullValue_p WRITE setNullValue_p)
    Q_PROPERTY(bool hasNullValue READ hasNullValue)
    Q_PROPERTY(double numberValue READ numberValue_p WRITE setNumberValue_p)
    Q_PROPERTY(bool hasNumberValue READ hasNumberValue)
    Q_PROPERTY(QString stringValue READ stringValue_p WRITE setStringValue_p)
    Q_PROPERTY(bool hasStringValue READ hasStringValue)
    Q_PROPERTY(bool boolValue READ boolValue_p WRITE setBoolValue_p)
    Q_PROPERTY(bool hasBoolValue READ hasBoolValue)
    Q_PROPERTY(google::protobuf::Struct *structValue_p READ structValue_p WRITE setStructValue_p SCRIPTABLE false)
    Q_PROPERTY(bool hasStructValue READ hasStructValue)
    Q_PROPERTY(google::protobuf::ListValue *listValue_p READ listValue_p WRITE setListValue_p SCRIPTABLE false)
    Q_PROPERTY(bool hasListValue READ hasListValue)

public:
    using QtProtobufFieldEnum = Value_QtProtobufNested::QtProtobufFieldEnum;
    using KindFields = Value_QtProtobufNested::KindFields;
    Value();
    ~Value();
    Value(const Value &other);
    Value &operator =(const Value &other);
    Value(Value &&other) noexcept;
    Value &operator =(Value &&other) noexcept;

    bool hasNullValue() const;
    NullValueGadget::NullValue nullValue() const;

    bool hasNumberValue() const;
    double numberValue() const;

    bool hasStringValue() const;
    QString stringValue() const;

    bool hasBoolValue() const;
    bool boolValue() const;

    bool hasStructValue() const;
    Struct &structValue() const;

    bool hasListValue() const;
    ListValue &listValue() const;
    KindFields kindField() const;
    void setNullValue(const NullValueGadget::NullValue &nullValue);
    void setNumberValue(const double &numberValue);
    void setStringValue(const QString &stringValue);
    void setBoolValue(const bool &boolValue);
    void setStructValue(const Struct &structValue);
    void setListValue(const ListValue &listValue);
    void clearKind();
    static void registerTypes();

private:
    friend QPB_PROTOBUFWELLKNOWNTYPES_EXPORT bool comparesEqual(const Value &lhs, const Value &rhs) noexcept;
    friend bool operator==(const Value &lhs, const Value &rhs) noexcept
    {
        return comparesEqual(lhs, rhs);
    }
    friend bool operator!=(const Value &lhs, const Value &rhs) noexcept
    {
        return !comparesEqual(lhs, rhs);
    }
    NullValueGadget::NullValue nullValue_p() const;
    double numberValue_p() const;
    QString stringValue_p() const;
    bool boolValue_p() const;
    Struct *structValue_p();
    ListValue *listValue_p();
    void setNullValue_p(NullValueGadget::NullValue nullValue);
    void setNumberValue_p(double numberValue);
    void setStringValue_p(QString stringValue);
    void setBoolValue_p(bool boolValue);
    void setStructValue_p(Struct *structValue);
    void setListValue_p(ListValue *listValue);
    QExplicitlySharedDataPointer<Value_QtProtobufData> dptr;
};
namespace Value_QtProtobufNested {
Q_NAMESPACE_EXPORT(QPB_PROTOBUFWELLKNOWNTYPES_EXPORT)

enum class QtProtobufFieldEnum {
    NullValueProtoFieldNumber = 1,
    NumberValueProtoFieldNumber = 2,
    StringValueProtoFieldNumber = 3,
    BoolValueProtoFieldNumber = 4,
    StructValueProtoFieldNumber = 5,
    ListValueProtoFieldNumber = 6,
};
Q_ENUM_NS(QtProtobufFieldEnum)

enum class KindFields {
    UninitializedField = QtProtobuf::InvalidFieldNumber,
    NullValue = 1,
    NumberValue = 2,
    StringValue = 3,
    BoolValue = 4,
    StructValue = 5,
    ListValue = 6,
};
Q_ENUM_NS(KindFields)

} // namespace Value_QtProtobufNested

class ListValue_QtProtobufData;
class QPB_PROTOBUFWELLKNOWNTYPES_EXPORT ListValue : public QProtobufMessage
{
    Q_PROTOBUF_OBJECT
    Q_PROPERTY(google::protobuf::ValueRepeated valuesData READ values WRITE setValues SCRIPTABLE true)

public:
    using QtProtobufFieldEnum = ListValue_QtProtobufNested::QtProtobufFieldEnum;
    ListValue();
    ~ListValue();
    ListValue(const ListValue &other);
    ListValue &operator =(const ListValue &other);
    ListValue(ListValue &&other) noexcept;
    ListValue &operator =(ListValue &&other) noexcept;

    ValueRepeated values() const;
    ValueRepeated &values();
    void setValues(const ValueRepeated &values);
    static void registerTypes();

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

enum class QtProtobufFieldEnum {
    ValuesProtoFieldNumber = 1,
};
Q_ENUM_NS(QtProtobufFieldEnum)

} // namespace ListValue_QtProtobufNested
} // namespace google::protobuf

Q_DECLARE_METATYPE(google::protobuf::Struct)
Q_DECLARE_METATYPE(google::protobuf::Value)
Q_DECLARE_METATYPE(google::protobuf::ListValue)
#endif // QPROTOBUF_STRUCT_H
