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

#ifndef STRUCT_QPB_H
#define STRUCT_QPB_H

#include "protobufwellknowntypes_exports.qpb.h"

#include <QtProtobuf/qprotobuflazymessagepointer.h>
#include <QtProtobuf/qprotobufmessage.h>
#include <QtProtobuf/qprotobufobject.h>
#include <QtProtobuf/qprotobufoneof.h>
#include <QtProtobuf/qtprotobuftypes.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 NullValueGadget {
Q_NAMESPACE_EXPORT(QPB_PROTOBUFWELLKNOWNTYPES_EXPORT)

enum class 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 Struct : public QProtobufMessage
{
    Q_PROTOBUF_OBJECT_EXPORT(QPB_PROTOBUFWELLKNOWNTYPES_EXPORT)
    Q_PROPERTY(google::protobuf::Struct::FieldsEntry fields READ fields WRITE setFields SCRIPTABLE true)

public:
    using QtProtobufFieldEnum = Struct_QtProtobufNested::QtProtobufFieldEnum;
    using FieldsEntry = QHash<QString, Value>;
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Struct();
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT ~Struct();
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Struct(const Struct &other);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Struct &operator =(const Struct &other);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Struct(Struct &&other) noexcept;
    Struct &operator =(Struct &&other) noexcept
    {
        swap(other);
        return *this;
    }
    void swap(Struct &other) noexcept
    {
        QProtobufMessage::swap(other);
        dptr.swap(other.dptr);
    }

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT const Struct::FieldsEntry &fields() const &;
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setFields(const Struct::FieldsEntry &fields);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setFields(Struct::FieldsEntry &&fields);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT 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 Value : public QProtobufMessage
{
    Q_PROTOBUF_OBJECT_EXPORT(QPB_PROTOBUFWELLKNOWNTYPES_EXPORT)
    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;
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Value();
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT ~Value();
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Value(const Value &other);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Value &operator =(const Value &other);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Value(Value &&other) noexcept;
    Value &operator =(Value &&other) noexcept
    {
        swap(other);
        return *this;
    }
    void swap(Value &other) noexcept
    {
        QProtobufMessage::swap(other);
        dptr.swap(other.dptr);
    }

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

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

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

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

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

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT bool hasListValue() const;
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT ListValue &listValue() const;
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT KindFields kindField() const;
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setNullValue(NullValueGadget::NullValue nullValue);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setNumberValue(double numberValue);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setStringValue(const QString &stringValue);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setStringValue(QString &&stringValue);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setBoolValue(bool boolValue);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setStructValue(const Struct &structValue);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setStructValue(Struct &&structValue);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setListValue(const ListValue &listValue);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setListValue(ListValue &&listValue);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void clearKind();
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT 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);
    }
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT NullValueGadget::NullValue nullValue_p() const;
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT double numberValue_p() const;
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT QString stringValue_p() const;
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT bool boolValue_p() const;
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Struct *structValue_p();
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT ListValue *listValue_p();
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setNullValue_p(NullValueGadget::NullValue nullValue);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setNumberValue_p(double numberValue);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setStringValue_p(QString stringValue);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setBoolValue_p(bool boolValue);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setStructValue_p(Struct *structValue);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT 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 : int32_t {
    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 ListValue : public QProtobufMessage
{
    Q_PROTOBUF_OBJECT_EXPORT(QPB_PROTOBUFWELLKNOWNTYPES_EXPORT)
    Q_PROPERTY(google::protobuf::ValueRepeated valuesData READ values WRITE setValues SCRIPTABLE true)

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

    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT const ValueRepeated &values() const &;
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setValues(const ValueRepeated &values);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT void setValues(ValueRepeated &&values);
    QPB_PROTOBUFWELLKNOWNTYPES_EXPORT 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

#endif // STRUCT_QPB_H
