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


#include "mozilla/dom/indexedDB/SerializationHelpers.h"
#include "mozilla/dom/indexedDB/ActorsChild.h"
#include "mozilla/dom/indexedDB/PBackgroundIDBTransactionParent.h"
#include "mozilla/dom/indexedDB/PBackgroundIDBTransactionChild.h"
#include "mozilla/dom/indexedDB/PBackgroundIDBVersionChangeTransactionParent.h"
#include "mozilla/dom/indexedDB/PBackgroundIDBVersionChangeTransactionChild.h"
#include "mozilla/dom/indexedDB/SerializationHelpers.h"
#include "mozilla/dom/quota/SerializationHelpers.h"
#include "mozilla/dom/indexedDB/PBackgroundIDBCursor.h"
#include "mozilla/dom/indexedDB/PBackgroundIDBCursorParent.h"
#include "mozilla/dom/indexedDB/PBackgroundIDBCursorChild.h"

#include "ipc/IPCMessageUtils.h"
#include "ipc/IPCMessageUtilsSpecializations.h"
#include "nsIFile.h"
#include "mozilla/ipc/Endpoint.h"
#include "mozilla/ipc/ProtocolMessageUtils.h"
#include "mozilla/ipc/ProtocolUtils.h"
#include "mozilla/ipc/ShmemMessageUtils.h"
#include "mozilla/ipc/TaintingIPCUtils.h"

namespace mozilla {
namespace dom {
namespace indexedDB {
namespace PBackgroundIDBCursor {

nsresult
CreateEndpoints(
        mozilla::ipc::EndpointProcInfo aParentDestInfo,
        mozilla::ipc::EndpointProcInfo aChildDestInfo,
        mozilla::ipc::Endpoint<::mozilla::dom::indexedDB::PBackgroundIDBCursorParent>* aParent,
        mozilla::ipc::Endpoint<::mozilla::dom::indexedDB::PBackgroundIDBCursorChild>* aChild)
{
    return mozilla::ipc::CreateEndpoints(
        mozilla::ipc::PrivateIPDLInterface(),
        aParentDestInfo, aChildDestInfo, aParent, aChild);
}
mozilla::UniquePtr<IPC::Message>
Msg_DeleteMe(IPC::Message::routeid_t routingId)
{
    return IPC::Message::IPDLMessage(routingId, Msg_DeleteMe__ID, 0, IPC::Message::HeaderFlags(IPC::Message::NOT_NESTED, IPC::Message::NORMAL_PRIORITY, IPC::Message::COMPRESSION_NONE, IPC::Message::EAGER_SEND, IPC::Message::NOT_CONSTRUCTOR, IPC::Message::ASYNC, IPC::Message::NOT_REPLY));
}
mozilla::UniquePtr<IPC::Message>
Msg_Continue(IPC::Message::routeid_t routingId)
{
    return IPC::Message::IPDLMessage(routingId, Msg_Continue__ID, 0, IPC::Message::HeaderFlags(IPC::Message::NOT_NESTED, IPC::Message::NORMAL_PRIORITY, IPC::Message::COMPRESSION_NONE, IPC::Message::EAGER_SEND, IPC::Message::NOT_CONSTRUCTOR, IPC::Message::ASYNC, IPC::Message::NOT_REPLY));
}
mozilla::UniquePtr<IPC::Message>
Msg___delete__(IPC::Message::routeid_t routingId)
{
    return IPC::Message::IPDLMessage(routingId, Msg___delete____ID, 0, IPC::Message::HeaderFlags(IPC::Message::NOT_NESTED, IPC::Message::NORMAL_PRIORITY, IPC::Message::COMPRESSION_NONE, IPC::Message::EAGER_SEND, IPC::Message::NOT_CONSTRUCTOR, IPC::Message::ASYNC, IPC::Message::NOT_REPLY));
}
mozilla::UniquePtr<IPC::Message>
Reply___delete__(IPC::Message::routeid_t routingId)
{
    return IPC::Message::IPDLMessage(routingId, Reply___delete____ID, 0, IPC::Message::HeaderFlags(IPC::Message::NOT_NESTED, IPC::Message::NORMAL_PRIORITY, IPC::Message::COMPRESSION_NONE, IPC::Message::EAGER_SEND, IPC::Message::NOT_CONSTRUCTOR, IPC::Message::ASYNC, IPC::Message::REPLY));
}
mozilla::UniquePtr<IPC::Message>
Msg_Response(IPC::Message::routeid_t routingId)
{
    return IPC::Message::IPDLMessage(routingId, Msg_Response__ID, 0, IPC::Message::HeaderFlags(IPC::Message::NOT_NESTED, IPC::Message::NORMAL_PRIORITY, IPC::Message::COMPRESSION_NONE, IPC::Message::EAGER_SEND, IPC::Message::NOT_CONSTRUCTOR, IPC::Message::ASYNC, IPC::Message::NOT_REPLY));
}

} // namespace PBackgroundIDBCursor
} // namespace indexedDB
} // namespace dom
} // namespace mozilla

//-----------------------------------------------------------------------------
// Method definitions for the IPDL type |struct ContinueParams|
//
namespace mozilla {
namespace dom {
namespace indexedDB {
} // namespace indexedDB
} // namespace dom
} // namespace mozilla

namespace IPC {
auto ParamTraits<::mozilla::dom::indexedDB::ContinueParams>::Write(
        IPC::MessageWriter* aWriter,
        const paramType& aVar) -> void
{
    IPC::WriteParam(aWriter, (aVar).key());
    // Sentinel = 'key'
    (aWriter)->WriteSentinel(42402122);
}

auto ParamTraits<::mozilla::dom::indexedDB::ContinueParams>::Read(IPC::MessageReader* aReader) -> IPC::ReadResult<paramType>
{
    auto maybe___key = IPC::ReadParam<::mozilla::dom::indexedDB::Key>(aReader);
    if (!maybe___key) {
        aReader->FatalError("Error deserializing 'key' (Key) member of 'ContinueParams'");
        return {};

    }
    auto& _key = *maybe___key;
    // Sentinel = 'key'
    if ((!((aReader)->ReadSentinel(42402122)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'key' (Key) member of 'ContinueParams'");
        return {};
    }
    IPC::ReadResult<paramType> result__{
            std::in_place,
            std::move(_key)};
    return result__;
}

} // namespace IPC

//-----------------------------------------------------------------------------
// Method definitions for the IPDL type |struct ContinuePrimaryKeyParams|
//
namespace mozilla {
namespace dom {
namespace indexedDB {
} // namespace indexedDB
} // namespace dom
} // namespace mozilla

namespace IPC {
auto ParamTraits<::mozilla::dom::indexedDB::ContinuePrimaryKeyParams>::Write(
        IPC::MessageWriter* aWriter,
        const paramType& aVar) -> void
{
    IPC::WriteParam(aWriter, (aVar).key());
    // Sentinel = 'key'
    (aWriter)->WriteSentinel(42402122);
    IPC::WriteParam(aWriter, (aVar).primaryKey());
    // Sentinel = 'primaryKey'
    (aWriter)->WriteSentinel(389481518);
}

auto ParamTraits<::mozilla::dom::indexedDB::ContinuePrimaryKeyParams>::Read(IPC::MessageReader* aReader) -> IPC::ReadResult<paramType>
{
    auto maybe___key = IPC::ReadParam<::mozilla::dom::indexedDB::Key>(aReader);
    if (!maybe___key) {
        aReader->FatalError("Error deserializing 'key' (Key) member of 'ContinuePrimaryKeyParams'");
        return {};

    }
    auto& _key = *maybe___key;
    // Sentinel = 'key'
    if ((!((aReader)->ReadSentinel(42402122)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'key' (Key) member of 'ContinuePrimaryKeyParams'");
        return {};
    }
    auto maybe___primaryKey = IPC::ReadParam<::mozilla::dom::indexedDB::Key>(aReader);
    if (!maybe___primaryKey) {
        aReader->FatalError("Error deserializing 'primaryKey' (Key) member of 'ContinuePrimaryKeyParams'");
        return {};

    }
    auto& _primaryKey = *maybe___primaryKey;
    // Sentinel = 'primaryKey'
    if ((!((aReader)->ReadSentinel(389481518)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'primaryKey' (Key) member of 'ContinuePrimaryKeyParams'");
        return {};
    }
    IPC::ReadResult<paramType> result__{
            std::in_place,
            std::move(_key),
            std::move(_primaryKey)};
    return result__;
}

} // namespace IPC

//-----------------------------------------------------------------------------
// Method definitions for the IPDL type |struct AdvanceParams|
//
namespace mozilla {
namespace dom {
namespace indexedDB {
} // namespace indexedDB
} // namespace dom
} // namespace mozilla

namespace IPC {
auto ParamTraits<::mozilla::dom::indexedDB::AdvanceParams>::Write(
        IPC::MessageWriter* aWriter,
        const paramType& aVar) -> void
{
    (aWriter)->WriteBytes((&((aVar).count())), 4);
    // Sentinel = 'count'
    (aWriter)->WriteSentinel(106889770);
}

auto ParamTraits<::mozilla::dom::indexedDB::AdvanceParams>::Read(IPC::MessageReader* aReader) -> IPC::ReadResult<paramType>
{
    IPC::ReadResult<paramType> result__{
            std::in_place,
            ::uint32_t{0}};
    if ((!((aReader)->ReadBytesInto((&((result__)->count())), 4)))) {
        aReader->FatalError("Error bulk reading fields from uint32_t");
        return {};
    }
    // Sentinel = 'count'
    if ((!((aReader)->ReadSentinel(106889770)))) {
        mozilla::ipc::SentinelReadError("Error bulk reading fields from uint32_t");
        return {};
    }
    return result__;
}

} // namespace IPC

//-----------------------------------------------------------------------------
// Method definitions for the IPDL type |union CursorRequestParams|
//
namespace mozilla {
namespace dom {
namespace indexedDB {
auto CursorRequestParams::MaybeDestroy() -> void
{
    if ((mType) == (T__None)) {
        return;
    }
    switch (mType) {
    case TContinueParams:
        {
            (ptr_ContinueParams())->~ContinueParams__tdef();
            break;
        }
    case TContinuePrimaryKeyParams:
        {
            (ptr_ContinuePrimaryKeyParams())->~ContinuePrimaryKeyParams__tdef();
            break;
        }
    case TAdvanceParams:
        {
            (ptr_AdvanceParams())->~AdvanceParams__tdef();
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("not reached");
            break;
        }
    }
}

MOZ_IMPLICIT CursorRequestParams::CursorRequestParams(const ContinueParams& aOther)
{
    new (mozilla::KnownNotNull, ptr_ContinueParams()) ContinueParams(aOther);
    mType = TContinueParams;
}

MOZ_IMPLICIT CursorRequestParams::CursorRequestParams(ContinueParams&& aOther)
{
    new (mozilla::KnownNotNull, ptr_ContinueParams()) ContinueParams(std::move(aOther));
    mType = TContinueParams;
}

MOZ_IMPLICIT CursorRequestParams::CursorRequestParams(const ContinuePrimaryKeyParams& aOther)
{
    new (mozilla::KnownNotNull, ptr_ContinuePrimaryKeyParams()) ContinuePrimaryKeyParams(aOther);
    mType = TContinuePrimaryKeyParams;
}

MOZ_IMPLICIT CursorRequestParams::CursorRequestParams(ContinuePrimaryKeyParams&& aOther)
{
    new (mozilla::KnownNotNull, ptr_ContinuePrimaryKeyParams()) ContinuePrimaryKeyParams(std::move(aOther));
    mType = TContinuePrimaryKeyParams;
}

MOZ_IMPLICIT CursorRequestParams::CursorRequestParams(const AdvanceParams& aOther)
{
    new (mozilla::KnownNotNull, ptr_AdvanceParams()) AdvanceParams(aOther);
    mType = TAdvanceParams;
}

MOZ_IMPLICIT CursorRequestParams::CursorRequestParams(AdvanceParams&& aOther)
{
    new (mozilla::KnownNotNull, ptr_AdvanceParams()) AdvanceParams(std::move(aOther));
    mType = TAdvanceParams;
}

MOZ_IMPLICIT CursorRequestParams::CursorRequestParams(const CursorRequestParams& aOther)
{
    (aOther).AssertSanity();
    switch ((aOther).type()) {
    case TContinueParams:
        {
            new (mozilla::KnownNotNull, ptr_ContinueParams()) ContinueParams((aOther).get_ContinueParams());
            break;
        }
    case TContinuePrimaryKeyParams:
        {
            new (mozilla::KnownNotNull, ptr_ContinuePrimaryKeyParams()) ContinuePrimaryKeyParams((aOther).get_ContinuePrimaryKeyParams());
            break;
        }
    case TAdvanceParams:
        {
            new (mozilla::KnownNotNull, ptr_AdvanceParams()) AdvanceParams((aOther).get_AdvanceParams());
            break;
        }
    case T__None:
        {
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("unreached");
            return;
        }
    }
    mType = (aOther).type();
}

MOZ_IMPLICIT CursorRequestParams::CursorRequestParams(CursorRequestParams&& aOther)
{
    (aOther).AssertSanity();
    Type t = (aOther).type();
    switch (t) {
    case TContinueParams:
        {
            new (mozilla::KnownNotNull, ptr_ContinueParams()) ContinueParams(std::move((aOther).get_ContinueParams()));
            (aOther).MaybeDestroy();
            break;
        }
    case TContinuePrimaryKeyParams:
        {
            new (mozilla::KnownNotNull, ptr_ContinuePrimaryKeyParams()) ContinuePrimaryKeyParams(std::move((aOther).get_ContinuePrimaryKeyParams()));
            (aOther).MaybeDestroy();
            break;
        }
    case TAdvanceParams:
        {
            new (mozilla::KnownNotNull, ptr_AdvanceParams()) AdvanceParams(std::move((aOther).get_AdvanceParams()));
            (aOther).MaybeDestroy();
            break;
        }
    case T__None:
        {
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("unreached");
            return;
        }
    }
    (aOther).mType = T__None;
    mType = t;
}

CursorRequestParams::~CursorRequestParams()
{
    MaybeDestroy();
}

auto CursorRequestParams::operator=(const ContinueParams& aRhs) -> CursorRequestParams&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_ContinueParams()) ContinueParams(aRhs);
    mType = TContinueParams;
    return (*(this));
}

auto CursorRequestParams::operator=(ContinueParams&& aRhs) -> CursorRequestParams&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_ContinueParams()) ContinueParams(std::move(aRhs));
    mType = TContinueParams;
    return (*(this));
}

auto CursorRequestParams::operator=(const ContinuePrimaryKeyParams& aRhs) -> CursorRequestParams&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_ContinuePrimaryKeyParams()) ContinuePrimaryKeyParams(aRhs);
    mType = TContinuePrimaryKeyParams;
    return (*(this));
}

auto CursorRequestParams::operator=(ContinuePrimaryKeyParams&& aRhs) -> CursorRequestParams&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_ContinuePrimaryKeyParams()) ContinuePrimaryKeyParams(std::move(aRhs));
    mType = TContinuePrimaryKeyParams;
    return (*(this));
}

auto CursorRequestParams::operator=(const AdvanceParams& aRhs) -> CursorRequestParams&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_AdvanceParams()) AdvanceParams(aRhs);
    mType = TAdvanceParams;
    return (*(this));
}

auto CursorRequestParams::operator=(AdvanceParams&& aRhs) -> CursorRequestParams&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_AdvanceParams()) AdvanceParams(std::move(aRhs));
    mType = TAdvanceParams;
    return (*(this));
}

auto CursorRequestParams::operator=(const CursorRequestParams& aRhs) -> CursorRequestParams&
{
    (aRhs).AssertSanity();
    Type t = (aRhs).type();
    switch (t) {
    case TContinueParams:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_ContinueParams()) ContinueParams((aRhs).get_ContinueParams());
            break;
        }
    case TContinuePrimaryKeyParams:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_ContinuePrimaryKeyParams()) ContinuePrimaryKeyParams((aRhs).get_ContinuePrimaryKeyParams());
            break;
        }
    case TAdvanceParams:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_AdvanceParams()) AdvanceParams((aRhs).get_AdvanceParams());
            break;
        }
    case T__None:
        {
            MaybeDestroy();
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("unreached");
            break;
        }
    }
    mType = t;
    return (*(this));
}

auto CursorRequestParams::operator=(CursorRequestParams&& aRhs) -> CursorRequestParams&
{
    (aRhs).AssertSanity();
    Type t = (aRhs).type();
    switch (t) {
    case TContinueParams:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_ContinueParams()) ContinueParams(std::move((aRhs).get_ContinueParams()));
            (aRhs).MaybeDestroy();
            break;
        }
    case TContinuePrimaryKeyParams:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_ContinuePrimaryKeyParams()) ContinuePrimaryKeyParams(std::move((aRhs).get_ContinuePrimaryKeyParams()));
            (aRhs).MaybeDestroy();
            break;
        }
    case TAdvanceParams:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_AdvanceParams()) AdvanceParams(std::move((aRhs).get_AdvanceParams()));
            (aRhs).MaybeDestroy();
            break;
        }
    case T__None:
        {
            MaybeDestroy();
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("unreached");
            break;
        }
    }
    (aRhs).mType = T__None;
    mType = t;
    return (*(this));
}

} // namespace indexedDB
} // namespace dom
} // namespace mozilla

namespace IPC {
auto ParamTraits<::mozilla::dom::indexedDB::CursorRequestParams>::Write(
        IPC::MessageWriter* aWriter,
        const paramType& aVar) -> void
{
    typedef ::mozilla::dom::indexedDB::CursorRequestParams union__;
    int type = (aVar).type();
    IPC::WriteParam(aWriter, type);
    // Sentinel = 'CursorRequestParams'
    (aWriter)->WriteSentinel(1298532300);

    switch (type) {
    case union__::TContinueParams:
        {
            IPC::WriteParam(aWriter, (aVar).get_ContinueParams());
            // Sentinel = 'TContinueParams'
            (aWriter)->WriteSentinel(785122814);
            return;
        }
    case union__::TContinuePrimaryKeyParams:
        {
            IPC::WriteParam(aWriter, (aVar).get_ContinuePrimaryKeyParams());
            // Sentinel = 'TContinuePrimaryKeyParams'
            (aWriter)->WriteSentinel(2164984331);
            return;
        }
    case union__::TAdvanceParams:
        {
            IPC::WriteParam(aWriter, (aVar).get_AdvanceParams());
            // Sentinel = 'TAdvanceParams'
            (aWriter)->WriteSentinel(657786219);
            return;
        }
    default:
        {
            aWriter->FatalError("unknown variant of union CursorRequestParams");
            return;
        }
    }
}

auto ParamTraits<::mozilla::dom::indexedDB::CursorRequestParams>::Read(IPC::MessageReader* aReader) -> IPC::ReadResult<paramType>
{
    typedef ::mozilla::dom::indexedDB::CursorRequestParams union__;
    auto maybe__type = IPC::ReadParam<int>(aReader);
    if (!maybe__type) {
        aReader->FatalError("Error deserializing type of union CursorRequestParams");
        return {};

    }
    auto& type = *maybe__type;
    // Sentinel = 'CursorRequestParams'
    if ((!((aReader)->ReadSentinel(1298532300)))) {
        mozilla::ipc::SentinelReadError("Error deserializing type of union CursorRequestParams");
        return {};
    }

    switch (type) {
    case union__::TContinueParams:
        {
            auto maybe__tmp = IPC::ReadParam<::mozilla::dom::indexedDB::ContinueParams>(aReader);
            if (!maybe__tmp) {
                aReader->FatalError("Error deserializing variant TContinueParams of union CursorRequestParams");
                return {};

            }
            auto& tmp = *maybe__tmp;
            // Sentinel = 'TContinueParams'
            if ((!((aReader)->ReadSentinel(785122814)))) {
                mozilla::ipc::SentinelReadError("Error deserializing variant TContinueParams of union CursorRequestParams");
                return {};
            }
            return std::move(tmp);
        }
    case union__::TContinuePrimaryKeyParams:
        {
            auto maybe__tmp = IPC::ReadParam<::mozilla::dom::indexedDB::ContinuePrimaryKeyParams>(aReader);
            if (!maybe__tmp) {
                aReader->FatalError("Error deserializing variant TContinuePrimaryKeyParams of union CursorRequestParams");
                return {};

            }
            auto& tmp = *maybe__tmp;
            // Sentinel = 'TContinuePrimaryKeyParams'
            if ((!((aReader)->ReadSentinel(2164984331)))) {
                mozilla::ipc::SentinelReadError("Error deserializing variant TContinuePrimaryKeyParams of union CursorRequestParams");
                return {};
            }
            return std::move(tmp);
        }
    case union__::TAdvanceParams:
        {
            auto maybe__tmp = IPC::ReadParam<::mozilla::dom::indexedDB::AdvanceParams>(aReader);
            if (!maybe__tmp) {
                aReader->FatalError("Error deserializing variant TAdvanceParams of union CursorRequestParams");
                return {};

            }
            auto& tmp = *maybe__tmp;
            // Sentinel = 'TAdvanceParams'
            if ((!((aReader)->ReadSentinel(657786219)))) {
                mozilla::ipc::SentinelReadError("Error deserializing variant TAdvanceParams of union CursorRequestParams");
                return {};
            }
            return std::move(tmp);
        }
    default:
        {
            aReader->FatalError("unknown variant of union CursorRequestParams");
            return {};
        }
    }
}

} // namespace IPC

//-----------------------------------------------------------------------------
// Method definitions for the IPDL type |struct ObjectStoreCursorResponse|
//
namespace mozilla {
namespace dom {
namespace indexedDB {
} // namespace indexedDB
} // namespace dom
} // namespace mozilla

namespace IPC {
auto ParamTraits<::mozilla::dom::indexedDB::ObjectStoreCursorResponse>::Write(
        IPC::MessageWriter* aWriter,
        const paramType& aVar) -> void
{
    IPC::WriteParam(aWriter, (aVar).key());
    // Sentinel = 'key'
    (aWriter)->WriteSentinel(42402122);
    IPC::WriteParam(aWriter, (aVar).cloneInfo());
    // Sentinel = 'cloneInfo'
    (aWriter)->WriteSentinel(304284574);
}

auto ParamTraits<::mozilla::dom::indexedDB::ObjectStoreCursorResponse>::Read(IPC::MessageReader* aReader) -> IPC::ReadResult<paramType>
{
    auto maybe___key = IPC::ReadParam<::mozilla::dom::indexedDB::Key>(aReader);
    if (!maybe___key) {
        aReader->FatalError("Error deserializing 'key' (Key) member of 'ObjectStoreCursorResponse'");
        return {};

    }
    auto& _key = *maybe___key;
    // Sentinel = 'key'
    if ((!((aReader)->ReadSentinel(42402122)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'key' (Key) member of 'ObjectStoreCursorResponse'");
        return {};
    }
    auto maybe___cloneInfo = IPC::ReadParam<::mozilla::dom::indexedDB::SerializedStructuredCloneReadInfo>(aReader);
    if (!maybe___cloneInfo) {
        aReader->FatalError("Error deserializing 'cloneInfo' (SerializedStructuredCloneReadInfo) member of 'ObjectStoreCursorResponse'");
        return {};

    }
    auto& _cloneInfo = *maybe___cloneInfo;
    // Sentinel = 'cloneInfo'
    if ((!((aReader)->ReadSentinel(304284574)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'cloneInfo' (SerializedStructuredCloneReadInfo) member of 'ObjectStoreCursorResponse'");
        return {};
    }
    IPC::ReadResult<paramType> result__{
            std::in_place,
            std::move(_key),
            std::move(_cloneInfo)};
    return result__;
}

} // namespace IPC

//-----------------------------------------------------------------------------
// Method definitions for the IPDL type |struct ObjectStoreKeyCursorResponse|
//
namespace mozilla {
namespace dom {
namespace indexedDB {
} // namespace indexedDB
} // namespace dom
} // namespace mozilla

namespace IPC {
auto ParamTraits<::mozilla::dom::indexedDB::ObjectStoreKeyCursorResponse>::Write(
        IPC::MessageWriter* aWriter,
        const paramType& aVar) -> void
{
    IPC::WriteParam(aWriter, (aVar).key());
    // Sentinel = 'key'
    (aWriter)->WriteSentinel(42402122);
}

auto ParamTraits<::mozilla::dom::indexedDB::ObjectStoreKeyCursorResponse>::Read(IPC::MessageReader* aReader) -> IPC::ReadResult<paramType>
{
    auto maybe___key = IPC::ReadParam<::mozilla::dom::indexedDB::Key>(aReader);
    if (!maybe___key) {
        aReader->FatalError("Error deserializing 'key' (Key) member of 'ObjectStoreKeyCursorResponse'");
        return {};

    }
    auto& _key = *maybe___key;
    // Sentinel = 'key'
    if ((!((aReader)->ReadSentinel(42402122)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'key' (Key) member of 'ObjectStoreKeyCursorResponse'");
        return {};
    }
    IPC::ReadResult<paramType> result__{
            std::in_place,
            std::move(_key)};
    return result__;
}

} // namespace IPC

//-----------------------------------------------------------------------------
// Method definitions for the IPDL type |struct IndexCursorResponse|
//
namespace mozilla {
namespace dom {
namespace indexedDB {
} // namespace indexedDB
} // namespace dom
} // namespace mozilla

namespace IPC {
auto ParamTraits<::mozilla::dom::indexedDB::IndexCursorResponse>::Write(
        IPC::MessageWriter* aWriter,
        const paramType& aVar) -> void
{
    IPC::WriteParam(aWriter, (aVar).key());
    // Sentinel = 'key'
    (aWriter)->WriteSentinel(42402122);
    IPC::WriteParam(aWriter, (aVar).sortKey());
    // Sentinel = 'sortKey'
    (aWriter)->WriteSentinel(200540914);
    IPC::WriteParam(aWriter, (aVar).objectKey());
    // Sentinel = 'objectKey'
    (aWriter)->WriteSentinel(304546721);
    IPC::WriteParam(aWriter, (aVar).cloneInfo());
    // Sentinel = 'cloneInfo'
    (aWriter)->WriteSentinel(304284574);
}

auto ParamTraits<::mozilla::dom::indexedDB::IndexCursorResponse>::Read(IPC::MessageReader* aReader) -> IPC::ReadResult<paramType>
{
    auto maybe___key = IPC::ReadParam<::mozilla::dom::indexedDB::Key>(aReader);
    if (!maybe___key) {
        aReader->FatalError("Error deserializing 'key' (Key) member of 'IndexCursorResponse'");
        return {};

    }
    auto& _key = *maybe___key;
    // Sentinel = 'key'
    if ((!((aReader)->ReadSentinel(42402122)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'key' (Key) member of 'IndexCursorResponse'");
        return {};
    }
    auto maybe___sortKey = IPC::ReadParam<::mozilla::dom::indexedDB::Key>(aReader);
    if (!maybe___sortKey) {
        aReader->FatalError("Error deserializing 'sortKey' (Key) member of 'IndexCursorResponse'");
        return {};

    }
    auto& _sortKey = *maybe___sortKey;
    // Sentinel = 'sortKey'
    if ((!((aReader)->ReadSentinel(200540914)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'sortKey' (Key) member of 'IndexCursorResponse'");
        return {};
    }
    auto maybe___objectKey = IPC::ReadParam<::mozilla::dom::indexedDB::Key>(aReader);
    if (!maybe___objectKey) {
        aReader->FatalError("Error deserializing 'objectKey' (Key) member of 'IndexCursorResponse'");
        return {};

    }
    auto& _objectKey = *maybe___objectKey;
    // Sentinel = 'objectKey'
    if ((!((aReader)->ReadSentinel(304546721)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'objectKey' (Key) member of 'IndexCursorResponse'");
        return {};
    }
    auto maybe___cloneInfo = IPC::ReadParam<::mozilla::dom::indexedDB::SerializedStructuredCloneReadInfo>(aReader);
    if (!maybe___cloneInfo) {
        aReader->FatalError("Error deserializing 'cloneInfo' (SerializedStructuredCloneReadInfo) member of 'IndexCursorResponse'");
        return {};

    }
    auto& _cloneInfo = *maybe___cloneInfo;
    // Sentinel = 'cloneInfo'
    if ((!((aReader)->ReadSentinel(304284574)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'cloneInfo' (SerializedStructuredCloneReadInfo) member of 'IndexCursorResponse'");
        return {};
    }
    IPC::ReadResult<paramType> result__{
            std::in_place,
            std::move(_key),
            std::move(_sortKey),
            std::move(_objectKey),
            std::move(_cloneInfo)};
    return result__;
}

} // namespace IPC

//-----------------------------------------------------------------------------
// Method definitions for the IPDL type |struct IndexKeyCursorResponse|
//
namespace mozilla {
namespace dom {
namespace indexedDB {
} // namespace indexedDB
} // namespace dom
} // namespace mozilla

namespace IPC {
auto ParamTraits<::mozilla::dom::indexedDB::IndexKeyCursorResponse>::Write(
        IPC::MessageWriter* aWriter,
        const paramType& aVar) -> void
{
    IPC::WriteParam(aWriter, (aVar).key());
    // Sentinel = 'key'
    (aWriter)->WriteSentinel(42402122);
    IPC::WriteParam(aWriter, (aVar).sortKey());
    // Sentinel = 'sortKey'
    (aWriter)->WriteSentinel(200540914);
    IPC::WriteParam(aWriter, (aVar).objectKey());
    // Sentinel = 'objectKey'
    (aWriter)->WriteSentinel(304546721);
}

auto ParamTraits<::mozilla::dom::indexedDB::IndexKeyCursorResponse>::Read(IPC::MessageReader* aReader) -> IPC::ReadResult<paramType>
{
    auto maybe___key = IPC::ReadParam<::mozilla::dom::indexedDB::Key>(aReader);
    if (!maybe___key) {
        aReader->FatalError("Error deserializing 'key' (Key) member of 'IndexKeyCursorResponse'");
        return {};

    }
    auto& _key = *maybe___key;
    // Sentinel = 'key'
    if ((!((aReader)->ReadSentinel(42402122)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'key' (Key) member of 'IndexKeyCursorResponse'");
        return {};
    }
    auto maybe___sortKey = IPC::ReadParam<::mozilla::dom::indexedDB::Key>(aReader);
    if (!maybe___sortKey) {
        aReader->FatalError("Error deserializing 'sortKey' (Key) member of 'IndexKeyCursorResponse'");
        return {};

    }
    auto& _sortKey = *maybe___sortKey;
    // Sentinel = 'sortKey'
    if ((!((aReader)->ReadSentinel(200540914)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'sortKey' (Key) member of 'IndexKeyCursorResponse'");
        return {};
    }
    auto maybe___objectKey = IPC::ReadParam<::mozilla::dom::indexedDB::Key>(aReader);
    if (!maybe___objectKey) {
        aReader->FatalError("Error deserializing 'objectKey' (Key) member of 'IndexKeyCursorResponse'");
        return {};

    }
    auto& _objectKey = *maybe___objectKey;
    // Sentinel = 'objectKey'
    if ((!((aReader)->ReadSentinel(304546721)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'objectKey' (Key) member of 'IndexKeyCursorResponse'");
        return {};
    }
    IPC::ReadResult<paramType> result__{
            std::in_place,
            std::move(_key),
            std::move(_sortKey),
            std::move(_objectKey)};
    return result__;
}

} // namespace IPC

//-----------------------------------------------------------------------------
// Method definitions for the IPDL type |union CursorResponse|
//
namespace mozilla {
namespace dom {
namespace indexedDB {
auto CursorResponse::MaybeDestroy() -> void
{
    if ((mType) == (T__None)) {
        return;
    }
    switch (mType) {
    case Tvoid_t:
        {
            (ptr_void_t())->~void_t__tdef();
            break;
        }
    case Tnsresult:
        {
            (ptr_nsresult())->~nsresult__tdef();
            break;
        }
    case TArrayOfObjectStoreCursorResponse:
        {
            (ptr_ArrayOfObjectStoreCursorResponse())->~ArrayOfObjectStoreCursorResponse__tdef();
            break;
        }
    case TArrayOfObjectStoreKeyCursorResponse:
        {
            (ptr_ArrayOfObjectStoreKeyCursorResponse())->~ArrayOfObjectStoreKeyCursorResponse__tdef();
            break;
        }
    case TArrayOfIndexCursorResponse:
        {
            (ptr_ArrayOfIndexCursorResponse())->~ArrayOfIndexCursorResponse__tdef();
            break;
        }
    case TArrayOfIndexKeyCursorResponse:
        {
            (ptr_ArrayOfIndexKeyCursorResponse())->~ArrayOfIndexKeyCursorResponse__tdef();
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("not reached");
            break;
        }
    }
}

MOZ_IMPLICIT CursorResponse::CursorResponse(const void_t& aOther)
{
    new (mozilla::KnownNotNull, ptr_void_t()) void_t(aOther);
    mType = Tvoid_t;
}

MOZ_IMPLICIT CursorResponse::CursorResponse(void_t&& aOther)
{
    new (mozilla::KnownNotNull, ptr_void_t()) void_t(std::move(aOther));
    mType = Tvoid_t;
}

MOZ_IMPLICIT CursorResponse::CursorResponse(const nsresult& aOther)
{
    new (mozilla::KnownNotNull, ptr_nsresult()) nsresult(aOther);
    mType = Tnsresult;
}

MOZ_IMPLICIT CursorResponse::CursorResponse(nsresult&& aOther)
{
    new (mozilla::KnownNotNull, ptr_nsresult()) nsresult(std::move(aOther));
    mType = Tnsresult;
}

MOZ_IMPLICIT CursorResponse::CursorResponse(nsTArray<ObjectStoreCursorResponse>&& aOther)
{
    new (mozilla::KnownNotNull, ptr_ArrayOfObjectStoreCursorResponse()) nsTArray<ObjectStoreCursorResponse>(std::move(aOther));
    mType = TArrayOfObjectStoreCursorResponse;
}

MOZ_IMPLICIT CursorResponse::CursorResponse(const nsTArray<ObjectStoreKeyCursorResponse>& aOther)
{
    new (mozilla::KnownNotNull, ptr_ArrayOfObjectStoreKeyCursorResponse()) nsTArray<ObjectStoreKeyCursorResponse>((aOther).Clone());
    mType = TArrayOfObjectStoreKeyCursorResponse;
}

MOZ_IMPLICIT CursorResponse::CursorResponse(nsTArray<ObjectStoreKeyCursorResponse>&& aOther)
{
    new (mozilla::KnownNotNull, ptr_ArrayOfObjectStoreKeyCursorResponse()) nsTArray<ObjectStoreKeyCursorResponse>(std::move(aOther));
    mType = TArrayOfObjectStoreKeyCursorResponse;
}

MOZ_IMPLICIT CursorResponse::CursorResponse(nsTArray<IndexCursorResponse>&& aOther)
{
    new (mozilla::KnownNotNull, ptr_ArrayOfIndexCursorResponse()) nsTArray<IndexCursorResponse>(std::move(aOther));
    mType = TArrayOfIndexCursorResponse;
}

MOZ_IMPLICIT CursorResponse::CursorResponse(const nsTArray<IndexKeyCursorResponse>& aOther)
{
    new (mozilla::KnownNotNull, ptr_ArrayOfIndexKeyCursorResponse()) nsTArray<IndexKeyCursorResponse>((aOther).Clone());
    mType = TArrayOfIndexKeyCursorResponse;
}

MOZ_IMPLICIT CursorResponse::CursorResponse(nsTArray<IndexKeyCursorResponse>&& aOther)
{
    new (mozilla::KnownNotNull, ptr_ArrayOfIndexKeyCursorResponse()) nsTArray<IndexKeyCursorResponse>(std::move(aOther));
    mType = TArrayOfIndexKeyCursorResponse;
}

MOZ_IMPLICIT CursorResponse::CursorResponse(CursorResponse&& aOther)
{
    (aOther).AssertSanity();
    Type t = (aOther).type();
    switch (t) {
    case Tvoid_t:
        {
            new (mozilla::KnownNotNull, ptr_void_t()) void_t(std::move((aOther).get_void_t()));
            (aOther).MaybeDestroy();
            break;
        }
    case Tnsresult:
        {
            new (mozilla::KnownNotNull, ptr_nsresult()) nsresult(std::move((aOther).get_nsresult()));
            (aOther).MaybeDestroy();
            break;
        }
    case TArrayOfObjectStoreCursorResponse:
        {
            new (mozilla::KnownNotNull, ptr_ArrayOfObjectStoreCursorResponse()) nsTArray<ObjectStoreCursorResponse>(std::move((aOther).get_ArrayOfObjectStoreCursorResponse()));
            (aOther).MaybeDestroy();
            break;
        }
    case TArrayOfObjectStoreKeyCursorResponse:
        {
            new (mozilla::KnownNotNull, ptr_ArrayOfObjectStoreKeyCursorResponse()) nsTArray<ObjectStoreKeyCursorResponse>(std::move((aOther).get_ArrayOfObjectStoreKeyCursorResponse()));
            (aOther).MaybeDestroy();
            break;
        }
    case TArrayOfIndexCursorResponse:
        {
            new (mozilla::KnownNotNull, ptr_ArrayOfIndexCursorResponse()) nsTArray<IndexCursorResponse>(std::move((aOther).get_ArrayOfIndexCursorResponse()));
            (aOther).MaybeDestroy();
            break;
        }
    case TArrayOfIndexKeyCursorResponse:
        {
            new (mozilla::KnownNotNull, ptr_ArrayOfIndexKeyCursorResponse()) nsTArray<IndexKeyCursorResponse>(std::move((aOther).get_ArrayOfIndexKeyCursorResponse()));
            (aOther).MaybeDestroy();
            break;
        }
    case T__None:
        {
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("unreached");
            return;
        }
    }
    (aOther).mType = T__None;
    mType = t;
}

CursorResponse::~CursorResponse()
{
    MaybeDestroy();
}

auto CursorResponse::operator=(const void_t& aRhs) -> CursorResponse&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_void_t()) void_t(aRhs);
    mType = Tvoid_t;
    return (*(this));
}

auto CursorResponse::operator=(void_t&& aRhs) -> CursorResponse&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_void_t()) void_t(std::move(aRhs));
    mType = Tvoid_t;
    return (*(this));
}

auto CursorResponse::operator=(const nsresult& aRhs) -> CursorResponse&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_nsresult()) nsresult(aRhs);
    mType = Tnsresult;
    return (*(this));
}

auto CursorResponse::operator=(nsresult&& aRhs) -> CursorResponse&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_nsresult()) nsresult(std::move(aRhs));
    mType = Tnsresult;
    return (*(this));
}

auto CursorResponse::operator=(nsTArray<ObjectStoreCursorResponse>&& aRhs) -> CursorResponse&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_ArrayOfObjectStoreCursorResponse()) nsTArray<ObjectStoreCursorResponse>(std::move(aRhs));
    mType = TArrayOfObjectStoreCursorResponse;
    return (*(this));
}

auto CursorResponse::operator=(const nsTArray<ObjectStoreKeyCursorResponse>& aRhs) -> CursorResponse&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_ArrayOfObjectStoreKeyCursorResponse()) nsTArray<ObjectStoreKeyCursorResponse>((aRhs).Clone());
    mType = TArrayOfObjectStoreKeyCursorResponse;
    return (*(this));
}

auto CursorResponse::operator=(nsTArray<ObjectStoreKeyCursorResponse>&& aRhs) -> CursorResponse&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_ArrayOfObjectStoreKeyCursorResponse()) nsTArray<ObjectStoreKeyCursorResponse>(std::move(aRhs));
    mType = TArrayOfObjectStoreKeyCursorResponse;
    return (*(this));
}

auto CursorResponse::operator=(nsTArray<IndexCursorResponse>&& aRhs) -> CursorResponse&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_ArrayOfIndexCursorResponse()) nsTArray<IndexCursorResponse>(std::move(aRhs));
    mType = TArrayOfIndexCursorResponse;
    return (*(this));
}

auto CursorResponse::operator=(const nsTArray<IndexKeyCursorResponse>& aRhs) -> CursorResponse&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_ArrayOfIndexKeyCursorResponse()) nsTArray<IndexKeyCursorResponse>((aRhs).Clone());
    mType = TArrayOfIndexKeyCursorResponse;
    return (*(this));
}

auto CursorResponse::operator=(nsTArray<IndexKeyCursorResponse>&& aRhs) -> CursorResponse&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_ArrayOfIndexKeyCursorResponse()) nsTArray<IndexKeyCursorResponse>(std::move(aRhs));
    mType = TArrayOfIndexKeyCursorResponse;
    return (*(this));
}

auto CursorResponse::operator=(CursorResponse&& aRhs) -> CursorResponse&
{
    (aRhs).AssertSanity();
    Type t = (aRhs).type();
    switch (t) {
    case Tvoid_t:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_void_t()) void_t(std::move((aRhs).get_void_t()));
            (aRhs).MaybeDestroy();
            break;
        }
    case Tnsresult:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_nsresult()) nsresult(std::move((aRhs).get_nsresult()));
            (aRhs).MaybeDestroy();
            break;
        }
    case TArrayOfObjectStoreCursorResponse:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_ArrayOfObjectStoreCursorResponse()) nsTArray<ObjectStoreCursorResponse>(std::move((aRhs).get_ArrayOfObjectStoreCursorResponse()));
            (aRhs).MaybeDestroy();
            break;
        }
    case TArrayOfObjectStoreKeyCursorResponse:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_ArrayOfObjectStoreKeyCursorResponse()) nsTArray<ObjectStoreKeyCursorResponse>(std::move((aRhs).get_ArrayOfObjectStoreKeyCursorResponse()));
            (aRhs).MaybeDestroy();
            break;
        }
    case TArrayOfIndexCursorResponse:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_ArrayOfIndexCursorResponse()) nsTArray<IndexCursorResponse>(std::move((aRhs).get_ArrayOfIndexCursorResponse()));
            (aRhs).MaybeDestroy();
            break;
        }
    case TArrayOfIndexKeyCursorResponse:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_ArrayOfIndexKeyCursorResponse()) nsTArray<IndexKeyCursorResponse>(std::move((aRhs).get_ArrayOfIndexKeyCursorResponse()));
            (aRhs).MaybeDestroy();
            break;
        }
    case T__None:
        {
            MaybeDestroy();
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("unreached");
            break;
        }
    }
    (aRhs).mType = T__None;
    mType = t;
    return (*(this));
}

} // namespace indexedDB
} // namespace dom
} // namespace mozilla

namespace IPC {
auto ParamTraits<::mozilla::dom::indexedDB::CursorResponse>::Write(
        IPC::MessageWriter* aWriter,
        const paramType& aVar) -> void
{
    typedef ::mozilla::dom::indexedDB::CursorResponse union__;
    int type = (aVar).type();
    IPC::WriteParam(aWriter, type);
    // Sentinel = 'CursorResponse'
    (aWriter)->WriteSentinel(718276046);

    switch (type) {
    case union__::Tvoid_t:
        {
            IPC::WriteParam(aWriter, (aVar).get_void_t());
            // Sentinel = 'Tvoid_t'
            (aWriter)->WriteSentinel(189006554);
            return;
        }
    case union__::Tnsresult:
        {
            IPC::WriteParam(aWriter, (aVar).get_nsresult());
            // Sentinel = 'Tnsresult'
            (aWriter)->WriteSentinel(313394133);
            return;
        }
    case union__::TArrayOfObjectStoreCursorResponse:
        {
            IPC::WriteParam(aWriter, (aVar).get_ArrayOfObjectStoreCursorResponse());
            // Sentinel = 'TArrayOfObjectStoreCursorResponse'
            (aWriter)->WriteSentinel(3673165114);
            return;
        }
    case union__::TArrayOfObjectStoreKeyCursorResponse:
        {
            IPC::WriteParam(aWriter, (aVar).get_ArrayOfObjectStoreKeyCursorResponse());
            // Sentinel = 'TArrayOfObjectStoreKeyCursorResponse'
            (aWriter)->WriteSentinel(61345379);
            return;
        }
    case union__::TArrayOfIndexCursorResponse:
        {
            IPC::WriteParam(aWriter, (aVar).get_ArrayOfIndexCursorResponse());
            // Sentinel = 'TArrayOfIndexCursorResponse'
            (aWriter)->WriteSentinel(2463632078);
            return;
        }
    case union__::TArrayOfIndexKeyCursorResponse:
        {
            IPC::WriteParam(aWriter, (aVar).get_ArrayOfIndexKeyCursorResponse());
            // Sentinel = 'TArrayOfIndexKeyCursorResponse'
            (aWriter)->WriteSentinel(3023899639);
            return;
        }
    default:
        {
            aWriter->FatalError("unknown variant of union CursorResponse");
            return;
        }
    }
}

auto ParamTraits<::mozilla::dom::indexedDB::CursorResponse>::Read(IPC::MessageReader* aReader) -> IPC::ReadResult<paramType>
{
    typedef ::mozilla::dom::indexedDB::CursorResponse union__;
    auto maybe__type = IPC::ReadParam<int>(aReader);
    if (!maybe__type) {
        aReader->FatalError("Error deserializing type of union CursorResponse");
        return {};

    }
    auto& type = *maybe__type;
    // Sentinel = 'CursorResponse'
    if ((!((aReader)->ReadSentinel(718276046)))) {
        mozilla::ipc::SentinelReadError("Error deserializing type of union CursorResponse");
        return {};
    }

    switch (type) {
    case union__::Tvoid_t:
        {
            auto maybe__tmp = IPC::ReadParam<::mozilla::void_t>(aReader);
            if (!maybe__tmp) {
                aReader->FatalError("Error deserializing variant Tvoid_t of union CursorResponse");
                return {};

            }
            auto& tmp = *maybe__tmp;
            // Sentinel = 'Tvoid_t'
            if ((!((aReader)->ReadSentinel(189006554)))) {
                mozilla::ipc::SentinelReadError("Error deserializing variant Tvoid_t of union CursorResponse");
                return {};
            }
            return std::move(tmp);
        }
    case union__::Tnsresult:
        {
            auto maybe__tmp = IPC::ReadParam<::nsresult>(aReader);
            if (!maybe__tmp) {
                aReader->FatalError("Error deserializing variant Tnsresult of union CursorResponse");
                return {};

            }
            auto& tmp = *maybe__tmp;
            // Sentinel = 'Tnsresult'
            if ((!((aReader)->ReadSentinel(313394133)))) {
                mozilla::ipc::SentinelReadError("Error deserializing variant Tnsresult of union CursorResponse");
                return {};
            }
            return std::move(tmp);
        }
    case union__::TArrayOfObjectStoreCursorResponse:
        {
            auto maybe__tmp = IPC::ReadParam<nsTArray<::mozilla::dom::indexedDB::ObjectStoreCursorResponse>>(aReader);
            if (!maybe__tmp) {
                aReader->FatalError("Error deserializing variant TArrayOfObjectStoreCursorResponse of union CursorResponse");
                return {};

            }
            auto& tmp = *maybe__tmp;
            // Sentinel = 'TArrayOfObjectStoreCursorResponse'
            if ((!((aReader)->ReadSentinel(3673165114)))) {
                mozilla::ipc::SentinelReadError("Error deserializing variant TArrayOfObjectStoreCursorResponse of union CursorResponse");
                return {};
            }
            return std::move(tmp);
        }
    case union__::TArrayOfObjectStoreKeyCursorResponse:
        {
            auto maybe__tmp = IPC::ReadParam<nsTArray<::mozilla::dom::indexedDB::ObjectStoreKeyCursorResponse>>(aReader);
            if (!maybe__tmp) {
                aReader->FatalError("Error deserializing variant TArrayOfObjectStoreKeyCursorResponse of union CursorResponse");
                return {};

            }
            auto& tmp = *maybe__tmp;
            // Sentinel = 'TArrayOfObjectStoreKeyCursorResponse'
            if ((!((aReader)->ReadSentinel(61345379)))) {
                mozilla::ipc::SentinelReadError("Error deserializing variant TArrayOfObjectStoreKeyCursorResponse of union CursorResponse");
                return {};
            }
            return std::move(tmp);
        }
    case union__::TArrayOfIndexCursorResponse:
        {
            auto maybe__tmp = IPC::ReadParam<nsTArray<::mozilla::dom::indexedDB::IndexCursorResponse>>(aReader);
            if (!maybe__tmp) {
                aReader->FatalError("Error deserializing variant TArrayOfIndexCursorResponse of union CursorResponse");
                return {};

            }
            auto& tmp = *maybe__tmp;
            // Sentinel = 'TArrayOfIndexCursorResponse'
            if ((!((aReader)->ReadSentinel(2463632078)))) {
                mozilla::ipc::SentinelReadError("Error deserializing variant TArrayOfIndexCursorResponse of union CursorResponse");
                return {};
            }
            return std::move(tmp);
        }
    case union__::TArrayOfIndexKeyCursorResponse:
        {
            auto maybe__tmp = IPC::ReadParam<nsTArray<::mozilla::dom::indexedDB::IndexKeyCursorResponse>>(aReader);
            if (!maybe__tmp) {
                aReader->FatalError("Error deserializing variant TArrayOfIndexKeyCursorResponse of union CursorResponse");
                return {};

            }
            auto& tmp = *maybe__tmp;
            // Sentinel = 'TArrayOfIndexKeyCursorResponse'
            if ((!((aReader)->ReadSentinel(3023899639)))) {
                mozilla::ipc::SentinelReadError("Error deserializing variant TArrayOfIndexKeyCursorResponse of union CursorResponse");
                return {};
            }
            return std::move(tmp);
        }
    default:
        {
            aReader->FatalError("unknown variant of union CursorResponse");
            return {};
        }
    }
}

} // namespace IPC
