//
// Automatically generated by ipdlc.
// Edit at your own risk
//

#ifndef PBackgroundLSRequest_h
#define PBackgroundLSRequest_h

#include "mozilla/Attributes.h"
#include "IPCMessageStart.h"
#include "mozilla/RefPtr.h"
#include "nsString.h"
#include "nsTArray.h"
#include "nsTHashtable.h"
#include "mozilla/MozPromise.h"
#include "mozilla/OperatorNewExtensions.h"
#include "mozilla/UniquePtr.h"
#include "mozilla/ipc/ByteBuf.h"
#include "mozilla/ipc/FileDescriptor.h"
#include "mozilla/ipc/IPCForwards.h"
#include "mozilla/ipc/Shmem.h"

// Headers for typedefs
#include "mozilla/ipc/Endpoint.h"
#include "mozilla/ipc/IPDLStructMember.h"
#include "mozilla/ipc/SideVariant.h"


//-----------------------------------------------------------------------------
// Declaration of the IPDL type |struct LSRequestPreloadDatastoreResponse|
//
namespace mozilla {
namespace dom {
class LSRequestPreloadDatastoreResponse final
{
private:

public:
#ifdef __clang__
#  pragma clang diagnostic push
#  if __has_warning("-Wdefaulted-function-deleted")
#    pragma clang diagnostic ignored "-Wdefaulted-function-deleted"
#  endif
#endif
    LSRequestPreloadDatastoreResponse() = default;
#ifdef __clang__
#  pragma clang diagnostic pop
#endif

    MOZ_IMPLICIT LSRequestPreloadDatastoreResponse(const bool& _invalidated) :
        invalidated_(_invalidated)
    {
    }

    MOZ_IMPLICIT LSRequestPreloadDatastoreResponse(bool&& _invalidated) :
        invalidated_(std::move(_invalidated))
    {
    }

    bool&
    invalidated()
    {
        return invalidated_;
    }
    const bool&
    invalidated() const
    {
        return invalidated_;
    }

private:
    ::mozilla::ipc::IPDLStructMember<bool> invalidated_;
};
} // namespace dom
} // namespace mozilla

namespace IPC {
template<>
struct ParamTraits <::mozilla::dom::LSRequestPreloadDatastoreResponse>
{
    typedef ::mozilla::dom::LSRequestPreloadDatastoreResponse paramType;
    static void
    Write(
            IPC::MessageWriter* aWriter,
            const paramType& aVar);
    static IPC::ReadResult<paramType>
    Read(IPC::MessageReader* aReader);
};
} // namespace IPC

namespace mozilla {
namespace dom {
class PBackgroundLSDatabaseParent;
} // namespace dom
} // namespace mozilla

namespace mozilla {
namespace dom {
class PBackgroundLSDatabaseChild;
} // namespace dom
} // namespace mozilla


//-----------------------------------------------------------------------------
// Declaration of the IPDL type |struct LSRequestPrepareDatastoreResponse|
//
namespace mozilla {
namespace dom {
class LSRequestPrepareDatastoreResponse final
{
private:
    template<class FooSide> using Endpoint = ::mozilla::ipc::Endpoint<FooSide>;
    typedef ::mozilla::dom::PBackgroundLSDatabaseParent PBackgroundLSDatabaseParent;
    typedef ::mozilla::dom::PBackgroundLSDatabaseChild PBackgroundLSDatabaseChild;

public:
#ifdef __clang__
#  pragma clang diagnostic push
#  if __has_warning("-Wdefaulted-function-deleted")
#    pragma clang diagnostic ignored "-Wdefaulted-function-deleted"
#  endif
#endif
    LSRequestPrepareDatastoreResponse() = default;
#ifdef __clang__
#  pragma clang diagnostic pop
#endif

    MOZ_IMPLICIT LSRequestPrepareDatastoreResponse(
            Endpoint<::mozilla::dom::PBackgroundLSDatabaseChild>&& _databaseChildEndpoint,
            const bool& _invalidated) :
        databaseChildEndpoint_(std::move(_databaseChildEndpoint)),
        invalidated_(_invalidated)
    {
    }

    MOZ_IMPLICIT LSRequestPrepareDatastoreResponse(
            Endpoint<::mozilla::dom::PBackgroundLSDatabaseChild>&& _databaseChildEndpoint,
            bool&& _invalidated) :
        databaseChildEndpoint_(std::move(_databaseChildEndpoint)),
        invalidated_(std::move(_invalidated))
    {
    }

    Endpoint<::mozilla::dom::PBackgroundLSDatabaseChild>&
    databaseChildEndpoint()
    {
        return databaseChildEndpoint_;
    }
    const Endpoint<::mozilla::dom::PBackgroundLSDatabaseChild>&
    databaseChildEndpoint() const
    {
        return databaseChildEndpoint_;
    }

    bool&
    invalidated()
    {
        return invalidated_;
    }
    const bool&
    invalidated() const
    {
        return invalidated_;
    }

private:
    ::mozilla::ipc::IPDLStructMember<Endpoint<::mozilla::dom::PBackgroundLSDatabaseChild>> databaseChildEndpoint_;
    ::mozilla::ipc::IPDLStructMember<bool> invalidated_;
};
} // namespace dom
} // namespace mozilla

namespace IPC {
template<>
struct ParamTraits <::mozilla::dom::LSRequestPrepareDatastoreResponse>
{
    typedef ::mozilla::dom::LSRequestPrepareDatastoreResponse paramType;
    static void
    Write(
            IPC::MessageWriter* aWriter,
            paramType&& aVar);
    static IPC::ReadResult<paramType>
    Read(IPC::MessageReader* aReader);
};
} // namespace IPC


//-----------------------------------------------------------------------------
// Declaration of the IPDL type |struct LSRequestPrepareObserverResponse|
//
namespace mozilla {
namespace dom {
class LSRequestPrepareObserverResponse final
{
private:
    typedef ::uint64_t uint64_t;

public:
#ifdef __clang__
#  pragma clang diagnostic push
#  if __has_warning("-Wdefaulted-function-deleted")
#    pragma clang diagnostic ignored "-Wdefaulted-function-deleted"
#  endif
#endif
    LSRequestPrepareObserverResponse() = default;
#ifdef __clang__
#  pragma clang diagnostic pop
#endif

    MOZ_IMPLICIT LSRequestPrepareObserverResponse(const uint64_t& _observerId) :
        observerId_(_observerId)
    {
    }

    MOZ_IMPLICIT LSRequestPrepareObserverResponse(uint64_t&& _observerId) :
        observerId_(std::move(_observerId))
    {
    }

    uint64_t&
    observerId()
    {
        return observerId_;
    }
    const uint64_t&
    observerId() const
    {
        return observerId_;
    }

private:
    ::mozilla::ipc::IPDLStructMember<uint64_t> observerId_;
};
} // namespace dom
} // namespace mozilla

namespace IPC {
template<>
struct ParamTraits <::mozilla::dom::LSRequestPrepareObserverResponse>
{
    typedef ::mozilla::dom::LSRequestPrepareObserverResponse paramType;
    static void
    Write(
            IPC::MessageWriter* aWriter,
            const paramType& aVar);
    static IPC::ReadResult<paramType>
    Read(IPC::MessageReader* aReader);
};
} // namespace IPC


//-----------------------------------------------------------------------------
// Declaration of the IPDL type |union LSRequestResponse|
//
namespace mozilla {
namespace dom {
class LSRequestResponse final
{
public:
    enum Type {
        T__None,
        Tnsresult = 1,
        TLSRequestPreloadDatastoreResponse,
        TLSRequestPrepareDatastoreResponse,
        TLSRequestPrepareObserverResponse,
        T__Last = TLSRequestPrepareObserverResponse
    };

private:
    typedef ::nsresult nsresult;
    typedef ::mozilla::dom::LSRequestPreloadDatastoreResponse LSRequestPreloadDatastoreResponse;
    typedef ::mozilla::dom::LSRequestPrepareDatastoreResponse LSRequestPrepareDatastoreResponse;
    typedef ::mozilla::dom::LSRequestPrepareObserverResponse LSRequestPrepareObserverResponse;
    typedef nsresult nsresult__tdef;
    typedef LSRequestPreloadDatastoreResponse LSRequestPreloadDatastoreResponse__tdef;
    typedef LSRequestPrepareDatastoreResponse LSRequestPrepareDatastoreResponse__tdef;
    typedef LSRequestPrepareObserverResponse LSRequestPrepareObserverResponse__tdef;

    nsresult*
    ptr_nsresult()
    {
        return (&(mVnsresult));
    }
    const nsresult*
    constptr_nsresult() const
    {
        return (&(mVnsresult));
    }
    LSRequestPreloadDatastoreResponse*
    ptr_LSRequestPreloadDatastoreResponse()
    {
        return (&(mVLSRequestPreloadDatastoreResponse));
    }
    const LSRequestPreloadDatastoreResponse*
    constptr_LSRequestPreloadDatastoreResponse() const
    {
        return (&(mVLSRequestPreloadDatastoreResponse));
    }
    LSRequestPrepareDatastoreResponse*
    ptr_LSRequestPrepareDatastoreResponse()
    {
        return (&(mVLSRequestPrepareDatastoreResponse));
    }
    const LSRequestPrepareDatastoreResponse*
    constptr_LSRequestPrepareDatastoreResponse() const
    {
        return (&(mVLSRequestPrepareDatastoreResponse));
    }
    LSRequestPrepareObserverResponse*
    ptr_LSRequestPrepareObserverResponse()
    {
        return (&(mVLSRequestPrepareObserverResponse));
    }
    const LSRequestPrepareObserverResponse*
    constptr_LSRequestPrepareObserverResponse() const
    {
        return (&(mVLSRequestPrepareObserverResponse));
    }

    void
    MaybeDestroy();

    void
    AssertSanity() const
    {
        MOZ_RELEASE_ASSERT((T__None) <= (mType), "invalid type tag");
        MOZ_RELEASE_ASSERT((mType) <= (T__Last), "invalid type tag");
    }
    void
    AssertSanity(Type aType) const
    {
        AssertSanity();
        MOZ_RELEASE_ASSERT((mType) == (aType), "unexpected type tag");
    }

public:
    MOZ_IMPLICIT LSRequestResponse() :
        mType(T__None)
    {
    }

    MOZ_IMPLICIT LSRequestResponse(const nsresult& aOther);

    MOZ_IMPLICIT LSRequestResponse(nsresult&& aOther);

    MOZ_IMPLICIT LSRequestResponse(const LSRequestPreloadDatastoreResponse& aOther);

    MOZ_IMPLICIT LSRequestResponse(LSRequestPreloadDatastoreResponse&& aOther);

    MOZ_IMPLICIT LSRequestResponse(LSRequestPrepareDatastoreResponse&& aOther);

    MOZ_IMPLICIT LSRequestResponse(const LSRequestPrepareObserverResponse& aOther);

    MOZ_IMPLICIT LSRequestResponse(LSRequestPrepareObserverResponse&& aOther);

    MOZ_IMPLICIT LSRequestResponse(LSRequestResponse&& aOther);

    ~LSRequestResponse();

    Type
    type() const
    {
        return mType;
    }

    LSRequestResponse&
    operator=(const nsresult& aRhs);

    LSRequestResponse&
    operator=(nsresult&& aRhs);

    LSRequestResponse&
    operator=(const LSRequestPreloadDatastoreResponse& aRhs);

    LSRequestResponse&
    operator=(LSRequestPreloadDatastoreResponse&& aRhs);

    LSRequestResponse&
    operator=(LSRequestPrepareDatastoreResponse&& aRhs);

    LSRequestResponse&
    operator=(const LSRequestPrepareObserverResponse& aRhs);

    LSRequestResponse&
    operator=(LSRequestPrepareObserverResponse&& aRhs);

    LSRequestResponse&
    operator=(LSRequestResponse&& aRhs);

    nsresult&
    get_nsresult()
    {
        AssertSanity(Tnsresult);
        return (*(ptr_nsresult()));
    }
    const nsresult&
    get_nsresult() const
    {
        AssertSanity(Tnsresult);
        return (*(constptr_nsresult()));
    }
    operator nsresult&()
    {
        return get_nsresult();
    }
    operator const nsresult&() const
    {
        return get_nsresult();
    }

    LSRequestPreloadDatastoreResponse&
    get_LSRequestPreloadDatastoreResponse()
    {
        AssertSanity(TLSRequestPreloadDatastoreResponse);
        return (*(ptr_LSRequestPreloadDatastoreResponse()));
    }
    const LSRequestPreloadDatastoreResponse&
    get_LSRequestPreloadDatastoreResponse() const
    {
        AssertSanity(TLSRequestPreloadDatastoreResponse);
        return (*(constptr_LSRequestPreloadDatastoreResponse()));
    }
    operator LSRequestPreloadDatastoreResponse&()
    {
        return get_LSRequestPreloadDatastoreResponse();
    }
    operator const LSRequestPreloadDatastoreResponse&() const
    {
        return get_LSRequestPreloadDatastoreResponse();
    }

    LSRequestPrepareDatastoreResponse&
    get_LSRequestPrepareDatastoreResponse()
    {
        AssertSanity(TLSRequestPrepareDatastoreResponse);
        return (*(ptr_LSRequestPrepareDatastoreResponse()));
    }
    const LSRequestPrepareDatastoreResponse&
    get_LSRequestPrepareDatastoreResponse() const
    {
        AssertSanity(TLSRequestPrepareDatastoreResponse);
        return (*(constptr_LSRequestPrepareDatastoreResponse()));
    }
    operator LSRequestPrepareDatastoreResponse&()
    {
        return get_LSRequestPrepareDatastoreResponse();
    }
    operator const LSRequestPrepareDatastoreResponse&() const
    {
        return get_LSRequestPrepareDatastoreResponse();
    }

    LSRequestPrepareObserverResponse&
    get_LSRequestPrepareObserverResponse()
    {
        AssertSanity(TLSRequestPrepareObserverResponse);
        return (*(ptr_LSRequestPrepareObserverResponse()));
    }
    const LSRequestPrepareObserverResponse&
    get_LSRequestPrepareObserverResponse() const
    {
        AssertSanity(TLSRequestPrepareObserverResponse);
        return (*(constptr_LSRequestPrepareObserverResponse()));
    }
    operator LSRequestPrepareObserverResponse&()
    {
        return get_LSRequestPrepareObserverResponse();
    }
    operator const LSRequestPrepareObserverResponse&() const
    {
        return get_LSRequestPrepareObserverResponse();
    }

private:
    union {
        nsresult mVnsresult;
        LSRequestPreloadDatastoreResponse mVLSRequestPreloadDatastoreResponse;
        LSRequestPrepareDatastoreResponse mVLSRequestPrepareDatastoreResponse;
        LSRequestPrepareObserverResponse mVLSRequestPrepareObserverResponse;
    };
    Type mType;
};
} // namespace dom
} // namespace mozilla

namespace IPC {
template<>
struct ParamTraits <::mozilla::dom::LSRequestResponse>
{
    typedef ::mozilla::dom::LSRequestResponse paramType;
    static void
    Write(
            IPC::MessageWriter* aWriter,
            paramType&& aVar);
    static IPC::ReadResult<paramType>
    Read(IPC::MessageReader* aReader);
};
} // namespace IPC

namespace mozilla {
namespace dom {
class PBackgroundLSRequestParent;
} // namespace dom
} // namespace mozilla
namespace mozilla {
namespace dom {
class PBackgroundLSRequestChild;
} // namespace dom
} // namespace mozilla

//-----------------------------------------------------------------------------
// Code common to PBackgroundLSRequestChild and PBackgroundLSRequestParent
//
namespace mozilla {
namespace dom {
namespace PBackgroundLSRequest {

nsresult
CreateEndpoints(
        mozilla::ipc::EndpointProcInfo aParentDestInfo,
        mozilla::ipc::EndpointProcInfo aChildDestInfo,
        mozilla::ipc::Endpoint<::mozilla::dom::PBackgroundLSRequestParent>* aParent,
        mozilla::ipc::Endpoint<::mozilla::dom::PBackgroundLSRequestChild>* aChild);

enum MessageType {
    PBackgroundLSRequestStart = PBackgroundLSRequestMsgStart << 16,
    Msg_Cancel__ID,
    Msg_Finish__ID,
    Msg___delete____ID,
    Reply___delete____ID,
    Msg_Ready__ID,
    PBackgroundLSRequestEnd
};

mozilla::UniquePtr<IPC::Message>
Msg_Cancel(IPC::Message::routeid_t routingId);

mozilla::UniquePtr<IPC::Message>
Msg_Finish(IPC::Message::routeid_t routingId);

mozilla::UniquePtr<IPC::Message>
Msg___delete__(IPC::Message::routeid_t routingId);
mozilla::UniquePtr<IPC::Message>
Reply___delete__(IPC::Message::routeid_t routingId);

mozilla::UniquePtr<IPC::Message>
Msg_Ready(IPC::Message::routeid_t routingId);



} // namespace PBackgroundLSRequest
} // namespace dom
} // namespace mozilla

#endif // ifndef PBackgroundLSRequest_h
