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

#ifndef QPROTOBUF_API_H
#define QPROTOBUF_API_H

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

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

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

#include <memory>


namespace google::protobuf {
class Api;
using ApiRepeated = QList<Api>;
namespace Api_QtProtobufNested {
enum class QtProtobufFieldEnum;
} // namespace Api_QtProtobufNested

class Method;
using MethodRepeated = QList<Method>;
namespace Method_QtProtobufNested {
enum class QtProtobufFieldEnum;
} // namespace Method_QtProtobufNested

class Mixin;
using MixinRepeated = QList<Mixin>;
namespace Mixin_QtProtobufNested {
enum class QtProtobufFieldEnum;
} // namespace Mixin_QtProtobufNested


class Api_QtProtobufData;
class QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Api : public QProtobufMessage
{
    Q_GADGET
    Q_PROTOBUF_OBJECT
    Q_DECLARE_PROTOBUF_SERIALIZERS(Api)
    Q_PROPERTY(QString name READ name WRITE setName SCRIPTABLE true)
    Q_PROPERTY(google::protobuf::MethodRepeated methodsData READ methods WRITE setMethods SCRIPTABLE true)
    Q_PROPERTY(google::protobuf::OptionRepeated optionsData READ options WRITE setOptions SCRIPTABLE true)
    Q_PROPERTY(QString version READ version WRITE setVersion SCRIPTABLE true)
    Q_PROPERTY(google::protobuf::SourceContext *sourceContext_p READ sourceContext_p WRITE setSourceContext_p SCRIPTABLE false)
    Q_PROPERTY(google::protobuf::MixinRepeated mixinsData READ mixins WRITE setMixins SCRIPTABLE true)
    Q_PROPERTY(google::protobuf::SyntaxGadget::Syntax syntax READ syntax WRITE setSyntax SCRIPTABLE true)

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

    QString name() const;

    MethodRepeated methods() const;
    MethodRepeated &methods();

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

    QString version() const;

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

    MixinRepeated mixins() const;
    MixinRepeated &mixins();

    SyntaxGadget::Syntax syntax() const;
    void setName(const QString &name);
    void setMethods(const MethodRepeated &methods);
    void setOptions(const OptionRepeated &options);
    void setVersion(const QString &version);
    void setSourceContext(const SourceContext &sourceContext);
    void setMixins(const MixinRepeated &mixins);
    void setSyntax(const SyntaxGadget::Syntax &syntax);
    static void registerTypes();

private:
    SourceContext *sourceContext_p() const;
    void setSourceContext_p(SourceContext *sourceContext);
    QExplicitlySharedDataPointer<Api_QtProtobufData> dptr;
};
namespace Api_QtProtobufNested {
Q_NAMESPACE_EXPORT(QPB_PROTOBUFWELLKNOWNTYPES_EXPORT)

enum class QtProtobufFieldEnum {
    NameProtoFieldNumber = 1,
    MethodsProtoFieldNumber = 2,
    OptionsProtoFieldNumber = 3,
    VersionProtoFieldNumber = 4,
    SourceContextProtoFieldNumber = 5,
    MixinsProtoFieldNumber = 6,
    SyntaxProtoFieldNumber = 7,
};
Q_ENUM_NS(QtProtobufFieldEnum)

} // namespace Api_QtProtobufNested

class Method_QtProtobufData;
class QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Method : public QProtobufMessage
{
    Q_GADGET
    Q_PROTOBUF_OBJECT
    Q_DECLARE_PROTOBUF_SERIALIZERS(Method)
    Q_PROPERTY(QString name READ name WRITE setName SCRIPTABLE true)
    Q_PROPERTY(QString requestTypeUrl READ requestTypeUrl WRITE setRequestTypeUrl SCRIPTABLE true)
    Q_PROPERTY(bool requestStreaming READ requestStreaming WRITE setRequestStreaming SCRIPTABLE true)
    Q_PROPERTY(QString responseTypeUrl READ responseTypeUrl WRITE setResponseTypeUrl SCRIPTABLE true)
    Q_PROPERTY(bool responseStreaming READ responseStreaming WRITE setResponseStreaming SCRIPTABLE true)
    Q_PROPERTY(google::protobuf::OptionRepeated optionsData READ options WRITE setOptions SCRIPTABLE true)
    Q_PROPERTY(google::protobuf::SyntaxGadget::Syntax syntax READ syntax WRITE setSyntax SCRIPTABLE true)

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

    QString name() const;

    QString requestTypeUrl() const;

    bool requestStreaming() const;

    QString responseTypeUrl() const;

    bool responseStreaming() const;

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

    SyntaxGadget::Syntax syntax() const;
    void setName(const QString &name);
    void setRequestTypeUrl(const QString &requestTypeUrl);
    void setRequestStreaming(const bool &requestStreaming);
    void setResponseTypeUrl(const QString &responseTypeUrl);
    void setResponseStreaming(const bool &responseStreaming);
    void setOptions(const OptionRepeated &options);
    void setSyntax(const SyntaxGadget::Syntax &syntax);
    static void registerTypes();

private:
    QExplicitlySharedDataPointer<Method_QtProtobufData> dptr;
};
namespace Method_QtProtobufNested {
Q_NAMESPACE_EXPORT(QPB_PROTOBUFWELLKNOWNTYPES_EXPORT)

enum class QtProtobufFieldEnum {
    NameProtoFieldNumber = 1,
    RequestTypeUrlProtoFieldNumber = 2,
    RequestStreamingProtoFieldNumber = 3,
    ResponseTypeUrlProtoFieldNumber = 4,
    ResponseStreamingProtoFieldNumber = 5,
    OptionsProtoFieldNumber = 6,
    SyntaxProtoFieldNumber = 7,
};
Q_ENUM_NS(QtProtobufFieldEnum)

} // namespace Method_QtProtobufNested

class Mixin_QtProtobufData;
class QPB_PROTOBUFWELLKNOWNTYPES_EXPORT Mixin : public QProtobufMessage
{
    Q_GADGET
    Q_PROTOBUF_OBJECT
    Q_DECLARE_PROTOBUF_SERIALIZERS(Mixin)
    Q_PROPERTY(QString name READ name WRITE setName SCRIPTABLE true)
    Q_PROPERTY(QString root READ root WRITE setRoot SCRIPTABLE true)

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

    QString name() const;

    QString root() const;
    void setName(const QString &name);
    void setRoot(const QString &root);
    static void registerTypes();

private:
    QExplicitlySharedDataPointer<Mixin_QtProtobufData> dptr;
};
namespace Mixin_QtProtobufNested {
Q_NAMESPACE_EXPORT(QPB_PROTOBUFWELLKNOWNTYPES_EXPORT)

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

} // namespace Mixin_QtProtobufNested
} // namespace google::protobuf

Q_DECLARE_METATYPE(google::protobuf::Api)
Q_DECLARE_METATYPE(google::protobuf::Method)
Q_DECLARE_METATYPE(google::protobuf::Mixin)
#endif // QPROTOBUF_API_H
