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


#include "mozilla/dom/IPCBlobUtils.h"
#include "mozilla/dom/CustomElementTypes.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"


//-----------------------------------------------------------------------------
// Method definitions for the IPDL type |union IPCFormDataValue|
//
namespace mozilla {
namespace dom {
auto IPCFormDataValue::MaybeDestroy() -> void
{
    if ((mType) == (T__None)) {
        return;
    }
    switch (mType) {
    case TBlobImpl:
        {
            (ptr_BlobImpl())->~BlobImpl__tdef();
            break;
        }
    case TnsString:
        {
            (ptr_nsString())->~nsString__tdef();
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("not reached");
            break;
        }
    }
}

MOZ_IMPLICIT IPCFormDataValue::IPCFormDataValue(mozilla::NotNull<BlobImpl*> aOther)
{
    new (mozilla::KnownNotNull, ptr_BlobImpl()) mozilla::NotNull<RefPtr<BlobImpl>>(aOther);
    mType = TBlobImpl;
}

MOZ_IMPLICIT IPCFormDataValue::IPCFormDataValue(mozilla::NotNull<RefPtr<BlobImpl>>&& aOther)
{
    new (mozilla::KnownNotNull, ptr_BlobImpl()) mozilla::NotNull<RefPtr<BlobImpl>>(std::move(aOther));
    mType = TBlobImpl;
}

MOZ_IMPLICIT IPCFormDataValue::IPCFormDataValue(const nsString& aOther)
{
    new (mozilla::KnownNotNull, ptr_nsString()) nsString(aOther);
    mType = TnsString;
}

MOZ_IMPLICIT IPCFormDataValue::IPCFormDataValue(nsString&& aOther)
{
    new (mozilla::KnownNotNull, ptr_nsString()) nsString(std::move(aOther));
    mType = TnsString;
}

MOZ_IMPLICIT IPCFormDataValue::IPCFormDataValue(const IPCFormDataValue& aOther)
{
    (aOther).AssertSanity();
    switch ((aOther).type()) {
    case TBlobImpl:
        {
            new (mozilla::KnownNotNull, ptr_BlobImpl()) mozilla::NotNull<RefPtr<BlobImpl>>((aOther).get_BlobImpl());
            break;
        }
    case TnsString:
        {
            new (mozilla::KnownNotNull, ptr_nsString()) nsString((aOther).get_nsString());
            break;
        }
    case T__None:
        {
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("unreached");
            return;
        }
    }
    mType = (aOther).type();
}

MOZ_IMPLICIT IPCFormDataValue::IPCFormDataValue(IPCFormDataValue&& aOther)
{
    (aOther).AssertSanity();
    Type t = (aOther).type();
    switch (t) {
    case TBlobImpl:
        {
            new (mozilla::KnownNotNull, ptr_BlobImpl()) mozilla::NotNull<RefPtr<BlobImpl>>(std::move((aOther).get_BlobImpl()));
            (aOther).MaybeDestroy();
            break;
        }
    case TnsString:
        {
            new (mozilla::KnownNotNull, ptr_nsString()) nsString(std::move((aOther).get_nsString()));
            (aOther).MaybeDestroy();
            break;
        }
    case T__None:
        {
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("unreached");
            return;
        }
    }
    (aOther).mType = T__None;
    mType = t;
}

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

auto IPCFormDataValue::operator=(mozilla::NotNull<BlobImpl*> aRhs) -> IPCFormDataValue&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_BlobImpl()) mozilla::NotNull<RefPtr<BlobImpl>>(aRhs);
    mType = TBlobImpl;
    return (*(this));
}

auto IPCFormDataValue::operator=(mozilla::NotNull<RefPtr<BlobImpl>>&& aRhs) -> IPCFormDataValue&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_BlobImpl()) mozilla::NotNull<RefPtr<BlobImpl>>(std::move(aRhs));
    mType = TBlobImpl;
    return (*(this));
}

auto IPCFormDataValue::operator=(const nsString& aRhs) -> IPCFormDataValue&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_nsString()) nsString(aRhs);
    mType = TnsString;
    return (*(this));
}

auto IPCFormDataValue::operator=(nsString&& aRhs) -> IPCFormDataValue&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_nsString()) nsString(std::move(aRhs));
    mType = TnsString;
    return (*(this));
}

auto IPCFormDataValue::operator=(const IPCFormDataValue& aRhs) -> IPCFormDataValue&
{
    (aRhs).AssertSanity();
    Type t = (aRhs).type();
    switch (t) {
    case TBlobImpl:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_BlobImpl()) mozilla::NotNull<RefPtr<BlobImpl>>((aRhs).get_BlobImpl());
            break;
        }
    case TnsString:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_nsString()) nsString((aRhs).get_nsString());
            break;
        }
    case T__None:
        {
            MaybeDestroy();
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("unreached");
            break;
        }
    }
    mType = t;
    return (*(this));
}

auto IPCFormDataValue::operator=(IPCFormDataValue&& aRhs) -> IPCFormDataValue&
{
    (aRhs).AssertSanity();
    Type t = (aRhs).type();
    switch (t) {
    case TBlobImpl:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_BlobImpl()) mozilla::NotNull<RefPtr<BlobImpl>>(std::move((aRhs).get_BlobImpl()));
            (aRhs).MaybeDestroy();
            break;
        }
    case TnsString:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_nsString()) nsString(std::move((aRhs).get_nsString()));
            (aRhs).MaybeDestroy();
            break;
        }
    case T__None:
        {
            MaybeDestroy();
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("unreached");
            break;
        }
    }
    (aRhs).mType = T__None;
    mType = t;
    return (*(this));
}

} // namespace dom
} // namespace mozilla

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

    switch (type) {
    case union__::TBlobImpl:
        {
            IPC::WriteParam(aWriter, (aVar).get_BlobImpl());
            // Sentinel = 'TBlobImpl'
            (aWriter)->WriteSentinel(272368486);
            return;
        }
    case union__::TnsString:
        {
            IPC::WriteParam(aWriter, (aVar).get_nsString());
            // Sentinel = 'TnsString'
            (aWriter)->WriteSentinel(302908333);
            return;
        }
    default:
        {
            aWriter->FatalError("unknown variant of union IPCFormDataValue");
            return;
        }
    }
}

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

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

    switch (type) {
    case union__::TBlobImpl:
        {
            auto maybe__tmp = IPC::ReadParam<mozilla::NotNull<RefPtr<::mozilla::dom::BlobImpl>>>(aReader);
            if (!maybe__tmp) {
                aReader->FatalError("Error deserializing variant TBlobImpl of union IPCFormDataValue");
                return {};

            }
            auto& tmp = *maybe__tmp;
            // Sentinel = 'TBlobImpl'
            if ((!((aReader)->ReadSentinel(272368486)))) {
                mozilla::ipc::SentinelReadError("Error deserializing variant TBlobImpl of union IPCFormDataValue");
                return {};
            }
            return std::move(tmp);
        }
    case union__::TnsString:
        {
            auto maybe__tmp = IPC::ReadParam<::nsString>(aReader);
            if (!maybe__tmp) {
                aReader->FatalError("Error deserializing variant TnsString of union IPCFormDataValue");
                return {};

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

} // namespace IPC

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

namespace IPC {
auto ParamTraits<::mozilla::dom::FormDataTuple>::Write(
        IPC::MessageWriter* aWriter,
        const paramType& aVar) -> void
{
    IPC::WriteParam(aWriter, (aVar).name());
    // Sentinel = 'name'
    (aWriter)->WriteSentinel(69075362);
    IPC::WriteParam(aWriter, (aVar).value());
    // Sentinel = 'value'
    (aWriter)->WriteSentinel(107610654);
}

auto ParamTraits<::mozilla::dom::FormDataTuple>::Read(IPC::MessageReader* aReader) -> IPC::ReadResult<paramType>
{
    auto maybe___name = IPC::ReadParam<::nsString>(aReader);
    if (!maybe___name) {
        aReader->FatalError("Error deserializing 'name' (nsString) member of 'FormDataTuple'");
        return {};

    }
    auto& _name = *maybe___name;
    // Sentinel = 'name'
    if ((!((aReader)->ReadSentinel(69075362)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'name' (nsString) member of 'FormDataTuple'");
        return {};
    }
    auto maybe___value = IPC::ReadParam<::mozilla::dom::IPCFormDataValue>(aReader);
    if (!maybe___value) {
        aReader->FatalError("Error deserializing 'value' (IPCFormDataValue) member of 'FormDataTuple'");
        return {};

    }
    auto& _value = *maybe___value;
    // Sentinel = 'value'
    if ((!((aReader)->ReadSentinel(107610654)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'value' (IPCFormDataValue) member of 'FormDataTuple'");
        return {};
    }
    IPC::ReadResult<paramType> result__{
            std::in_place,
            std::move(_name),
            std::move(_value)};
    return result__;
}

} // namespace IPC

//-----------------------------------------------------------------------------
// Method definitions for the IPDL type |union CustomElementFormValue|
//
namespace mozilla {
namespace dom {
auto CustomElementFormValue::MaybeDestroy() -> void
{
    if ((mType) == (T__None)) {
        return;
    }
    switch (mType) {
    case Tvoid_t:
        {
            (ptr_void_t())->~void_t__tdef();
            break;
        }
    case TBlobImpl:
        {
            (ptr_BlobImpl())->~BlobImpl__tdef();
            break;
        }
    case TnsString:
        {
            (ptr_nsString())->~nsString__tdef();
            break;
        }
    case TArrayOfFormDataTuple:
        {
            (ptr_ArrayOfFormDataTuple())->~ArrayOfFormDataTuple__tdef();
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("not reached");
            break;
        }
    }
}

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

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

MOZ_IMPLICIT CustomElementFormValue::CustomElementFormValue(BlobImpl* aOther)
{
    new (mozilla::KnownNotNull, ptr_BlobImpl()) RefPtr<BlobImpl>(aOther);
    mType = TBlobImpl;
}

MOZ_IMPLICIT CustomElementFormValue::CustomElementFormValue(RefPtr<BlobImpl>&& aOther)
{
    new (mozilla::KnownNotNull, ptr_BlobImpl()) RefPtr<BlobImpl>(std::move(aOther));
    mType = TBlobImpl;
}

MOZ_IMPLICIT CustomElementFormValue::CustomElementFormValue(const nsString& aOther)
{
    new (mozilla::KnownNotNull, ptr_nsString()) nsString(aOther);
    mType = TnsString;
}

MOZ_IMPLICIT CustomElementFormValue::CustomElementFormValue(nsString&& aOther)
{
    new (mozilla::KnownNotNull, ptr_nsString()) nsString(std::move(aOther));
    mType = TnsString;
}

MOZ_IMPLICIT CustomElementFormValue::CustomElementFormValue(const nsTArray<FormDataTuple>& aOther)
{
    new (mozilla::KnownNotNull, ptr_ArrayOfFormDataTuple()) nsTArray<FormDataTuple>((aOther).Clone());
    mType = TArrayOfFormDataTuple;
}

MOZ_IMPLICIT CustomElementFormValue::CustomElementFormValue(nsTArray<FormDataTuple>&& aOther)
{
    new (mozilla::KnownNotNull, ptr_ArrayOfFormDataTuple()) nsTArray<FormDataTuple>(std::move(aOther));
    mType = TArrayOfFormDataTuple;
}

MOZ_IMPLICIT CustomElementFormValue::CustomElementFormValue(const CustomElementFormValue& aOther)
{
    (aOther).AssertSanity();
    switch ((aOther).type()) {
    case Tvoid_t:
        {
            new (mozilla::KnownNotNull, ptr_void_t()) void_t((aOther).get_void_t());
            break;
        }
    case TBlobImpl:
        {
            new (mozilla::KnownNotNull, ptr_BlobImpl()) RefPtr<BlobImpl>((aOther).get_BlobImpl());
            break;
        }
    case TnsString:
        {
            new (mozilla::KnownNotNull, ptr_nsString()) nsString((aOther).get_nsString());
            break;
        }
    case TArrayOfFormDataTuple:
        {
            new (mozilla::KnownNotNull, ptr_ArrayOfFormDataTuple()) nsTArray<FormDataTuple>(((aOther).get_ArrayOfFormDataTuple()).Clone());
            break;
        }
    case T__None:
        {
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("unreached");
            return;
        }
    }
    mType = (aOther).type();
}

MOZ_IMPLICIT CustomElementFormValue::CustomElementFormValue(CustomElementFormValue&& 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 TBlobImpl:
        {
            new (mozilla::KnownNotNull, ptr_BlobImpl()) RefPtr<BlobImpl>(std::move((aOther).get_BlobImpl()));
            (aOther).MaybeDestroy();
            break;
        }
    case TnsString:
        {
            new (mozilla::KnownNotNull, ptr_nsString()) nsString(std::move((aOther).get_nsString()));
            (aOther).MaybeDestroy();
            break;
        }
    case TArrayOfFormDataTuple:
        {
            new (mozilla::KnownNotNull, ptr_ArrayOfFormDataTuple()) nsTArray<FormDataTuple>(std::move((aOther).get_ArrayOfFormDataTuple()));
            (aOther).MaybeDestroy();
            break;
        }
    case T__None:
        {
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("unreached");
            return;
        }
    }
    (aOther).mType = T__None;
    mType = t;
}

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

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

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

auto CustomElementFormValue::operator=(BlobImpl* aRhs) -> CustomElementFormValue&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_BlobImpl()) RefPtr<BlobImpl>(aRhs);
    mType = TBlobImpl;
    return (*(this));
}

auto CustomElementFormValue::operator=(RefPtr<BlobImpl>&& aRhs) -> CustomElementFormValue&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_BlobImpl()) RefPtr<BlobImpl>(std::move(aRhs));
    mType = TBlobImpl;
    return (*(this));
}

auto CustomElementFormValue::operator=(const nsString& aRhs) -> CustomElementFormValue&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_nsString()) nsString(aRhs);
    mType = TnsString;
    return (*(this));
}

auto CustomElementFormValue::operator=(nsString&& aRhs) -> CustomElementFormValue&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_nsString()) nsString(std::move(aRhs));
    mType = TnsString;
    return (*(this));
}

auto CustomElementFormValue::operator=(const nsTArray<FormDataTuple>& aRhs) -> CustomElementFormValue&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_ArrayOfFormDataTuple()) nsTArray<FormDataTuple>((aRhs).Clone());
    mType = TArrayOfFormDataTuple;
    return (*(this));
}

auto CustomElementFormValue::operator=(nsTArray<FormDataTuple>&& aRhs) -> CustomElementFormValue&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_ArrayOfFormDataTuple()) nsTArray<FormDataTuple>(std::move(aRhs));
    mType = TArrayOfFormDataTuple;
    return (*(this));
}

auto CustomElementFormValue::operator=(const CustomElementFormValue& aRhs) -> CustomElementFormValue&
{
    (aRhs).AssertSanity();
    Type t = (aRhs).type();
    switch (t) {
    case Tvoid_t:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_void_t()) void_t((aRhs).get_void_t());
            break;
        }
    case TBlobImpl:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_BlobImpl()) RefPtr<BlobImpl>((aRhs).get_BlobImpl());
            break;
        }
    case TnsString:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_nsString()) nsString((aRhs).get_nsString());
            break;
        }
    case TArrayOfFormDataTuple:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_ArrayOfFormDataTuple()) nsTArray<FormDataTuple>(((aRhs).get_ArrayOfFormDataTuple()).Clone());
            break;
        }
    case T__None:
        {
            MaybeDestroy();
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("unreached");
            break;
        }
    }
    mType = t;
    return (*(this));
}

auto CustomElementFormValue::operator=(CustomElementFormValue&& aRhs) -> CustomElementFormValue&
{
    (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 TBlobImpl:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_BlobImpl()) RefPtr<BlobImpl>(std::move((aRhs).get_BlobImpl()));
            (aRhs).MaybeDestroy();
            break;
        }
    case TnsString:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_nsString()) nsString(std::move((aRhs).get_nsString()));
            (aRhs).MaybeDestroy();
            break;
        }
    case TArrayOfFormDataTuple:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_ArrayOfFormDataTuple()) nsTArray<FormDataTuple>(std::move((aRhs).get_ArrayOfFormDataTuple()));
            (aRhs).MaybeDestroy();
            break;
        }
    case T__None:
        {
            MaybeDestroy();
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("unreached");
            break;
        }
    }
    (aRhs).mType = T__None;
    mType = t;
    return (*(this));
}

} // namespace dom
} // namespace mozilla

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

    switch (type) {
    case union__::Tvoid_t:
        {
            IPC::WriteParam(aWriter, (aVar).get_void_t());
            // Sentinel = 'Tvoid_t'
            (aWriter)->WriteSentinel(189006554);
            return;
        }
    case union__::TBlobImpl:
        {
            IPC::WriteParam(aWriter, (aVar).get_BlobImpl());
            // Sentinel = 'TBlobImpl'
            (aWriter)->WriteSentinel(272368486);
            return;
        }
    case union__::TnsString:
        {
            IPC::WriteParam(aWriter, (aVar).get_nsString());
            // Sentinel = 'TnsString'
            (aWriter)->WriteSentinel(302908333);
            return;
        }
    case union__::TArrayOfFormDataTuple:
        {
            IPC::WriteParam(aWriter, (aVar).get_ArrayOfFormDataTuple());
            // Sentinel = 'TArrayOfFormDataTuple'
            (aWriter)->WriteSentinel(1468663841);
            return;
        }
    default:
        {
            aWriter->FatalError("unknown variant of union CustomElementFormValue");
            return;
        }
    }
}

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

    }
    auto& type = *maybe__type;
    // Sentinel = 'CustomElementFormValue'
    if ((!((aReader)->ReadSentinel(1696860375)))) {
        mozilla::ipc::SentinelReadError("Error deserializing type of union CustomElementFormValue");
        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 CustomElementFormValue");
                return {};

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

            }
            auto& tmp = *maybe__tmp;
            // Sentinel = 'TBlobImpl'
            if ((!((aReader)->ReadSentinel(272368486)))) {
                mozilla::ipc::SentinelReadError("Error deserializing variant TBlobImpl of union CustomElementFormValue");
                return {};
            }
            return std::move(tmp);
        }
    case union__::TnsString:
        {
            auto maybe__tmp = IPC::ReadParam<::nsString>(aReader);
            if (!maybe__tmp) {
                aReader->FatalError("Error deserializing variant TnsString of union CustomElementFormValue");
                return {};

            }
            auto& tmp = *maybe__tmp;
            // Sentinel = 'TnsString'
            if ((!((aReader)->ReadSentinel(302908333)))) {
                mozilla::ipc::SentinelReadError("Error deserializing variant TnsString of union CustomElementFormValue");
                return {};
            }
            return std::move(tmp);
        }
    case union__::TArrayOfFormDataTuple:
        {
            auto maybe__tmp = IPC::ReadParam<nsTArray<::mozilla::dom::FormDataTuple>>(aReader);
            if (!maybe__tmp) {
                aReader->FatalError("Error deserializing variant TArrayOfFormDataTuple of union CustomElementFormValue");
                return {};

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

} // namespace IPC

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

namespace IPC {
auto ParamTraits<::mozilla::dom::CustomElementTuple>::Write(
        IPC::MessageWriter* aWriter,
        const paramType& aVar) -> void
{
    IPC::WriteParam(aWriter, (aVar).value());
    // Sentinel = 'value'
    (aWriter)->WriteSentinel(107610654);
    IPC::WriteParam(aWriter, (aVar).state());
    // Sentinel = 'state'
    (aWriter)->WriteSentinel(109314594);
}

auto ParamTraits<::mozilla::dom::CustomElementTuple>::Read(IPC::MessageReader* aReader) -> IPC::ReadResult<paramType>
{
    auto maybe___value = IPC::ReadParam<::mozilla::dom::CustomElementFormValue>(aReader);
    if (!maybe___value) {
        aReader->FatalError("Error deserializing 'value' (CustomElementFormValue) member of 'CustomElementTuple'");
        return {};

    }
    auto& _value = *maybe___value;
    // Sentinel = 'value'
    if ((!((aReader)->ReadSentinel(107610654)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'value' (CustomElementFormValue) member of 'CustomElementTuple'");
        return {};
    }
    auto maybe___state = IPC::ReadParam<::mozilla::dom::CustomElementFormValue>(aReader);
    if (!maybe___state) {
        aReader->FatalError("Error deserializing 'state' (CustomElementFormValue) member of 'CustomElementTuple'");
        return {};

    }
    auto& _state = *maybe___state;
    // Sentinel = 'state'
    if ((!((aReader)->ReadSentinel(109314594)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'state' (CustomElementFormValue) member of 'CustomElementTuple'");
        return {};
    }
    IPC::ReadResult<paramType> result__{
            std::in_place,
            std::move(_value),
            std::move(_state)};
    return result__;
}

} // namespace IPC
