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


#include "mozilla/GfxMessageUtils.h"
#include "mozilla/dom/IPCBlobUtils.h"
#include "mozilla/dom/IPCBlobUtils.h"
#include "mozilla/PresState.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 |struct SelectContentData|
//
namespace mozilla {
} // namespace mozilla

namespace IPC {
auto ParamTraits<::mozilla::SelectContentData>::Write(
        IPC::MessageWriter* aWriter,
        const paramType& aVar) -> void
{
    IPC::WriteParam(aWriter, (aVar).indices());
    // Sentinel = 'indices'
    (aWriter)->WriteSentinel(192414432);
    IPC::WriteParam(aWriter, (aVar).values());
    // Sentinel = 'values'
    (aWriter)->WriteSentinel(150667921);
}

auto ParamTraits<::mozilla::SelectContentData>::Read(IPC::MessageReader* aReader) -> IPC::ReadResult<paramType>
{
    auto maybe___indices = IPC::ReadParam<nsTArray<::uint32_t>>(aReader);
    if (!maybe___indices) {
        aReader->FatalError("Error deserializing 'indices' (uint32_t[]) member of 'SelectContentData'");
        return {};

    }
    auto& _indices = *maybe___indices;
    // Sentinel = 'indices'
    if ((!((aReader)->ReadSentinel(192414432)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'indices' (uint32_t[]) member of 'SelectContentData'");
        return {};
    }
    auto maybe___values = IPC::ReadParam<nsTArray<::nsString>>(aReader);
    if (!maybe___values) {
        aReader->FatalError("Error deserializing 'values' (nsString[]) member of 'SelectContentData'");
        return {};

    }
    auto& _values = *maybe___values;
    // Sentinel = 'values'
    if ((!((aReader)->ReadSentinel(150667921)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'values' (nsString[]) member of 'SelectContentData'");
        return {};
    }
    IPC::ReadResult<paramType> result__{
            std::in_place,
            std::move(_indices),
            std::move(_values)};
    return result__;
}

} // namespace IPC

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

namespace IPC {
auto ParamTraits<::mozilla::CheckedContentData>::Write(
        IPC::MessageWriter* aWriter,
        const paramType& aVar) -> void
{
    IPC::WriteParam(aWriter, (aVar).checked());
    // Sentinel = 'checked'
    (aWriter)->WriteSentinel(186647240);
}

auto ParamTraits<::mozilla::CheckedContentData>::Read(IPC::MessageReader* aReader) -> IPC::ReadResult<paramType>
{
    auto maybe___checked = IPC::ReadParam<bool>(aReader);
    if (!maybe___checked) {
        aReader->FatalError("Error deserializing 'checked' (bool) member of 'CheckedContentData'");
        return {};

    }
    auto& _checked = *maybe___checked;
    // Sentinel = 'checked'
    if ((!((aReader)->ReadSentinel(186647240)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'checked' (bool) member of 'CheckedContentData'");
        return {};
    }
    IPC::ReadResult<paramType> result__{
            std::in_place,
            std::move(_checked)};
    return result__;
}

} // namespace IPC

//-----------------------------------------------------------------------------
// Method definitions for the IPDL type |union FileContentData|
//
namespace mozilla {
auto FileContentData::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 FileContentData::FileContentData(BlobImpl* aOther)
{
    new (mozilla::KnownNotNull, ptr_BlobImpl()) RefPtr<BlobImpl>(aOther);
    mType = TBlobImpl;
}

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

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

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

MOZ_IMPLICIT FileContentData::FileContentData(const FileContentData& aOther)
{
    (aOther).AssertSanity();
    switch ((aOther).type()) {
    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 T__None:
        {
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("unreached");
            return;
        }
    }
    mType = (aOther).type();
}

MOZ_IMPLICIT FileContentData::FileContentData(FileContentData&& aOther)
{
    (aOther).AssertSanity();
    Type t = (aOther).type();
    switch (t) {
    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 T__None:
        {
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("unreached");
            return;
        }
    }
    (aOther).mType = T__None;
    mType = t;
}

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

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

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

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

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

auto FileContentData::operator=(const FileContentData& aRhs) -> FileContentData&
{
    (aRhs).AssertSanity();
    Type t = (aRhs).type();
    switch (t) {
    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 T__None:
        {
            MaybeDestroy();
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("unreached");
            break;
        }
    }
    mType = t;
    return (*(this));
}

auto FileContentData::operator=(FileContentData&& aRhs) -> FileContentData&
{
    (aRhs).AssertSanity();
    Type t = (aRhs).type();
    switch (t) {
    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 T__None:
        {
            MaybeDestroy();
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("unreached");
            break;
        }
    }
    (aRhs).mType = T__None;
    mType = t;
    return (*(this));
}

} // namespace mozilla

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

    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 FileContentData");
            return;
        }
    }
}

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

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

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

            }
            auto& tmp = *maybe__tmp;
            // Sentinel = 'TBlobImpl'
            if ((!((aReader)->ReadSentinel(272368486)))) {
                mozilla::ipc::SentinelReadError("Error deserializing variant TBlobImpl of union FileContentData");
                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 FileContentData");
                return {};

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

} // namespace IPC

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

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

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

    }
    auto& _value = *maybe___value;
    // Sentinel = 'value'
    if ((!((aReader)->ReadSentinel(107610654)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'value' (nsString) member of 'TextContentData'");
        return {};
    }
    auto maybe___lastValueChangeWasInteractive = IPC::ReadParam<bool>(aReader);
    if (!maybe___lastValueChangeWasInteractive) {
        aReader->FatalError("Error deserializing 'lastValueChangeWasInteractive' (bool) member of 'TextContentData'");
        return {};

    }
    auto& _lastValueChangeWasInteractive = *maybe___lastValueChangeWasInteractive;
    // Sentinel = 'lastValueChangeWasInteractive'
    if ((!((aReader)->ReadSentinel(2906852257)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'lastValueChangeWasInteractive' (bool) member of 'TextContentData'");
        return {};
    }
    IPC::ReadResult<paramType> result__{
            std::in_place,
            std::move(_value),
            std::move(_lastValueChangeWasInteractive)};
    return result__;
}

} // namespace IPC

//-----------------------------------------------------------------------------
// Method definitions for the IPDL type |union PresContentData|
//
namespace mozilla {
auto PresContentData::MaybeDestroy() -> void
{
    if ((mType) == (T__None)) {
        return;
    }
    switch (mType) {
    case Tvoid_t:
        {
            (ptr_void_t())->~void_t__tdef();
            break;
        }
    case TTextContentData:
        {
            (ptr_TextContentData())->~TextContentData__tdef();
            break;
        }
    case TSelectContentData:
        {
            (ptr_SelectContentData())->~SelectContentData__tdef();
            break;
        }
    case TCheckedContentData:
        {
            (ptr_CheckedContentData())->~CheckedContentData__tdef();
            break;
        }
    case TArrayOfFileContentData:
        {
            (ptr_ArrayOfFileContentData())->~ArrayOfFileContentData__tdef();
            break;
        }
    case TCustomElementTuple:
        {
            (ptr_CustomElementTuple())->~CustomElementTuple__tdef();
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("not reached");
            break;
        }
    }
}

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

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

MOZ_IMPLICIT PresContentData::PresContentData(const TextContentData& aOther)
{
    new (mozilla::KnownNotNull, ptr_TextContentData()) TextContentData(aOther);
    mType = TTextContentData;
}

MOZ_IMPLICIT PresContentData::PresContentData(TextContentData&& aOther)
{
    new (mozilla::KnownNotNull, ptr_TextContentData()) TextContentData(std::move(aOther));
    mType = TTextContentData;
}

MOZ_IMPLICIT PresContentData::PresContentData(const SelectContentData& aOther)
{
    new (mozilla::KnownNotNull, ptr_SelectContentData()) SelectContentData(aOther);
    mType = TSelectContentData;
}

MOZ_IMPLICIT PresContentData::PresContentData(SelectContentData&& aOther)
{
    new (mozilla::KnownNotNull, ptr_SelectContentData()) SelectContentData(std::move(aOther));
    mType = TSelectContentData;
}

MOZ_IMPLICIT PresContentData::PresContentData(const CheckedContentData& aOther)
{
    new (mozilla::KnownNotNull, ptr_CheckedContentData()) CheckedContentData(aOther);
    mType = TCheckedContentData;
}

MOZ_IMPLICIT PresContentData::PresContentData(CheckedContentData&& aOther)
{
    new (mozilla::KnownNotNull, ptr_CheckedContentData()) CheckedContentData(std::move(aOther));
    mType = TCheckedContentData;
}

MOZ_IMPLICIT PresContentData::PresContentData(const nsTArray<FileContentData>& aOther)
{
    new (mozilla::KnownNotNull, ptr_ArrayOfFileContentData()) nsTArray<FileContentData>((aOther).Clone());
    mType = TArrayOfFileContentData;
}

MOZ_IMPLICIT PresContentData::PresContentData(nsTArray<FileContentData>&& aOther)
{
    new (mozilla::KnownNotNull, ptr_ArrayOfFileContentData()) nsTArray<FileContentData>(std::move(aOther));
    mType = TArrayOfFileContentData;
}

MOZ_IMPLICIT PresContentData::PresContentData(const CustomElementTuple& aOther)
{
    new (mozilla::KnownNotNull, ptr_CustomElementTuple()) CustomElementTuple(aOther);
    mType = TCustomElementTuple;
}

MOZ_IMPLICIT PresContentData::PresContentData(CustomElementTuple&& aOther)
{
    new (mozilla::KnownNotNull, ptr_CustomElementTuple()) CustomElementTuple(std::move(aOther));
    mType = TCustomElementTuple;
}

MOZ_IMPLICIT PresContentData::PresContentData(const PresContentData& aOther)
{
    (aOther).AssertSanity();
    switch ((aOther).type()) {
    case Tvoid_t:
        {
            new (mozilla::KnownNotNull, ptr_void_t()) void_t((aOther).get_void_t());
            break;
        }
    case TTextContentData:
        {
            new (mozilla::KnownNotNull, ptr_TextContentData()) TextContentData((aOther).get_TextContentData());
            break;
        }
    case TSelectContentData:
        {
            new (mozilla::KnownNotNull, ptr_SelectContentData()) SelectContentData((aOther).get_SelectContentData());
            break;
        }
    case TCheckedContentData:
        {
            new (mozilla::KnownNotNull, ptr_CheckedContentData()) CheckedContentData((aOther).get_CheckedContentData());
            break;
        }
    case TArrayOfFileContentData:
        {
            new (mozilla::KnownNotNull, ptr_ArrayOfFileContentData()) nsTArray<FileContentData>(((aOther).get_ArrayOfFileContentData()).Clone());
            break;
        }
    case TCustomElementTuple:
        {
            new (mozilla::KnownNotNull, ptr_CustomElementTuple()) CustomElementTuple((aOther).get_CustomElementTuple());
            break;
        }
    case T__None:
        {
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("unreached");
            return;
        }
    }
    mType = (aOther).type();
}

MOZ_IMPLICIT PresContentData::PresContentData(PresContentData&& 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 TTextContentData:
        {
            new (mozilla::KnownNotNull, ptr_TextContentData()) TextContentData(std::move((aOther).get_TextContentData()));
            (aOther).MaybeDestroy();
            break;
        }
    case TSelectContentData:
        {
            new (mozilla::KnownNotNull, ptr_SelectContentData()) SelectContentData(std::move((aOther).get_SelectContentData()));
            (aOther).MaybeDestroy();
            break;
        }
    case TCheckedContentData:
        {
            new (mozilla::KnownNotNull, ptr_CheckedContentData()) CheckedContentData(std::move((aOther).get_CheckedContentData()));
            (aOther).MaybeDestroy();
            break;
        }
    case TArrayOfFileContentData:
        {
            new (mozilla::KnownNotNull, ptr_ArrayOfFileContentData()) nsTArray<FileContentData>(std::move((aOther).get_ArrayOfFileContentData()));
            (aOther).MaybeDestroy();
            break;
        }
    case TCustomElementTuple:
        {
            new (mozilla::KnownNotNull, ptr_CustomElementTuple()) CustomElementTuple(std::move((aOther).get_CustomElementTuple()));
            (aOther).MaybeDestroy();
            break;
        }
    case T__None:
        {
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("unreached");
            return;
        }
    }
    (aOther).mType = T__None;
    mType = t;
}

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

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

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

auto PresContentData::operator=(const TextContentData& aRhs) -> PresContentData&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_TextContentData()) TextContentData(aRhs);
    mType = TTextContentData;
    return (*(this));
}

auto PresContentData::operator=(TextContentData&& aRhs) -> PresContentData&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_TextContentData()) TextContentData(std::move(aRhs));
    mType = TTextContentData;
    return (*(this));
}

auto PresContentData::operator=(const SelectContentData& aRhs) -> PresContentData&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_SelectContentData()) SelectContentData(aRhs);
    mType = TSelectContentData;
    return (*(this));
}

auto PresContentData::operator=(SelectContentData&& aRhs) -> PresContentData&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_SelectContentData()) SelectContentData(std::move(aRhs));
    mType = TSelectContentData;
    return (*(this));
}

auto PresContentData::operator=(const CheckedContentData& aRhs) -> PresContentData&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_CheckedContentData()) CheckedContentData(aRhs);
    mType = TCheckedContentData;
    return (*(this));
}

auto PresContentData::operator=(CheckedContentData&& aRhs) -> PresContentData&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_CheckedContentData()) CheckedContentData(std::move(aRhs));
    mType = TCheckedContentData;
    return (*(this));
}

auto PresContentData::operator=(const nsTArray<FileContentData>& aRhs) -> PresContentData&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_ArrayOfFileContentData()) nsTArray<FileContentData>((aRhs).Clone());
    mType = TArrayOfFileContentData;
    return (*(this));
}

auto PresContentData::operator=(nsTArray<FileContentData>&& aRhs) -> PresContentData&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_ArrayOfFileContentData()) nsTArray<FileContentData>(std::move(aRhs));
    mType = TArrayOfFileContentData;
    return (*(this));
}

auto PresContentData::operator=(const CustomElementTuple& aRhs) -> PresContentData&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_CustomElementTuple()) CustomElementTuple(aRhs);
    mType = TCustomElementTuple;
    return (*(this));
}

auto PresContentData::operator=(CustomElementTuple&& aRhs) -> PresContentData&
{
    MaybeDestroy();
    new (mozilla::KnownNotNull, ptr_CustomElementTuple()) CustomElementTuple(std::move(aRhs));
    mType = TCustomElementTuple;
    return (*(this));
}

auto PresContentData::operator=(const PresContentData& aRhs) -> PresContentData&
{
    (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 TTextContentData:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_TextContentData()) TextContentData((aRhs).get_TextContentData());
            break;
        }
    case TSelectContentData:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_SelectContentData()) SelectContentData((aRhs).get_SelectContentData());
            break;
        }
    case TCheckedContentData:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_CheckedContentData()) CheckedContentData((aRhs).get_CheckedContentData());
            break;
        }
    case TArrayOfFileContentData:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_ArrayOfFileContentData()) nsTArray<FileContentData>(((aRhs).get_ArrayOfFileContentData()).Clone());
            break;
        }
    case TCustomElementTuple:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_CustomElementTuple()) CustomElementTuple((aRhs).get_CustomElementTuple());
            break;
        }
    case T__None:
        {
            MaybeDestroy();
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("unreached");
            break;
        }
    }
    mType = t;
    return (*(this));
}

auto PresContentData::operator=(PresContentData&& aRhs) -> PresContentData&
{
    (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 TTextContentData:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_TextContentData()) TextContentData(std::move((aRhs).get_TextContentData()));
            (aRhs).MaybeDestroy();
            break;
        }
    case TSelectContentData:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_SelectContentData()) SelectContentData(std::move((aRhs).get_SelectContentData()));
            (aRhs).MaybeDestroy();
            break;
        }
    case TCheckedContentData:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_CheckedContentData()) CheckedContentData(std::move((aRhs).get_CheckedContentData()));
            (aRhs).MaybeDestroy();
            break;
        }
    case TArrayOfFileContentData:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_ArrayOfFileContentData()) nsTArray<FileContentData>(std::move((aRhs).get_ArrayOfFileContentData()));
            (aRhs).MaybeDestroy();
            break;
        }
    case TCustomElementTuple:
        {
            MaybeDestroy();
            new (mozilla::KnownNotNull, ptr_CustomElementTuple()) CustomElementTuple(std::move((aRhs).get_CustomElementTuple()));
            (aRhs).MaybeDestroy();
            break;
        }
    case T__None:
        {
            MaybeDestroy();
            break;
        }
    default:
        {
            mozilla::ipc::LogicError("unreached");
            break;
        }
    }
    (aRhs).mType = T__None;
    mType = t;
    return (*(this));
}

} // namespace mozilla

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

    switch (type) {
    case union__::Tvoid_t:
        {
            IPC::WriteParam(aWriter, (aVar).get_void_t());
            // Sentinel = 'Tvoid_t'
            (aWriter)->WriteSentinel(189006554);
            return;
        }
    case union__::TTextContentData:
        {
            IPC::WriteParam(aWriter, (aVar).get_TextContentData());
            // Sentinel = 'TTextContentData'
            (aWriter)->WriteSentinel(890635855);
            return;
        }
    case union__::TSelectContentData:
        {
            IPC::WriteParam(aWriter, (aVar).get_SelectContentData());
            // Sentinel = 'TSelectContentData'
            (aWriter)->WriteSentinel(1105856266);
            return;
        }
    case union__::TCheckedContentData:
        {
            IPC::WriteParam(aWriter, (aVar).get_CheckedContentData());
            // Sentinel = 'TCheckedContentData'
            (aWriter)->WriteSentinel(1199638353);
            return;
        }
    case union__::TArrayOfFileContentData:
        {
            IPC::WriteParam(aWriter, (aVar).get_ArrayOfFileContentData());
            // Sentinel = 'TArrayOfFileContentData'
            (aWriter)->WriteSentinel(1756039390);
            return;
        }
    case union__::TCustomElementTuple:
        {
            IPC::WriteParam(aWriter, (aVar).get_CustomElementTuple());
            // Sentinel = 'TCustomElementTuple'
            (aWriter)->WriteSentinel(1257179044);
            return;
        }
    default:
        {
            aWriter->FatalError("unknown variant of union PresContentData");
            return;
        }
    }
}

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

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

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

            }
            auto& tmp = *maybe__tmp;
            // Sentinel = 'TTextContentData'
            if ((!((aReader)->ReadSentinel(890635855)))) {
                mozilla::ipc::SentinelReadError("Error deserializing variant TTextContentData of union PresContentData");
                return {};
            }
            return std::move(tmp);
        }
    case union__::TSelectContentData:
        {
            auto maybe__tmp = IPC::ReadParam<::mozilla::SelectContentData>(aReader);
            if (!maybe__tmp) {
                aReader->FatalError("Error deserializing variant TSelectContentData of union PresContentData");
                return {};

            }
            auto& tmp = *maybe__tmp;
            // Sentinel = 'TSelectContentData'
            if ((!((aReader)->ReadSentinel(1105856266)))) {
                mozilla::ipc::SentinelReadError("Error deserializing variant TSelectContentData of union PresContentData");
                return {};
            }
            return std::move(tmp);
        }
    case union__::TCheckedContentData:
        {
            auto maybe__tmp = IPC::ReadParam<::mozilla::CheckedContentData>(aReader);
            if (!maybe__tmp) {
                aReader->FatalError("Error deserializing variant TCheckedContentData of union PresContentData");
                return {};

            }
            auto& tmp = *maybe__tmp;
            // Sentinel = 'TCheckedContentData'
            if ((!((aReader)->ReadSentinel(1199638353)))) {
                mozilla::ipc::SentinelReadError("Error deserializing variant TCheckedContentData of union PresContentData");
                return {};
            }
            return std::move(tmp);
        }
    case union__::TArrayOfFileContentData:
        {
            auto maybe__tmp = IPC::ReadParam<nsTArray<::mozilla::FileContentData>>(aReader);
            if (!maybe__tmp) {
                aReader->FatalError("Error deserializing variant TArrayOfFileContentData of union PresContentData");
                return {};

            }
            auto& tmp = *maybe__tmp;
            // Sentinel = 'TArrayOfFileContentData'
            if ((!((aReader)->ReadSentinel(1756039390)))) {
                mozilla::ipc::SentinelReadError("Error deserializing variant TArrayOfFileContentData of union PresContentData");
                return {};
            }
            return std::move(tmp);
        }
    case union__::TCustomElementTuple:
        {
            auto maybe__tmp = IPC::ReadParam<::mozilla::dom::CustomElementTuple>(aReader);
            if (!maybe__tmp) {
                aReader->FatalError("Error deserializing variant TCustomElementTuple of union PresContentData");
                return {};

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

} // namespace IPC

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

namespace IPC {
auto ParamTraits<::mozilla::PresState>::Write(
        IPC::MessageWriter* aWriter,
        const paramType& aVar) -> void
{
    IPC::WriteParam(aWriter, (aVar).contentData());
    // Sentinel = 'contentData'
    (aWriter)->WriteSentinel(456590454);
    IPC::WriteParam(aWriter, (aVar).scrollState());
    // Sentinel = 'scrollState'
    (aWriter)->WriteSentinel(464454801);
    IPC::WriteParam(aWriter, (aVar).allowScrollOriginDowngrade());
    // Sentinel = 'allowScrollOriginDowngrade'
    (aWriter)->WriteSentinel(2402224786);
    IPC::WriteParam(aWriter, (aVar).disabledSet());
    // Sentinel = 'disabledSet'
    (aWriter)->WriteSentinel(444204133);
    IPC::WriteParam(aWriter, (aVar).disabled());
    // Sentinel = 'disabled'
    (aWriter)->WriteSentinel(244843321);
    IPC::WriteParam(aWriter, (aVar).droppedDown());
    // Sentinel = 'droppedDown'
    (aWriter)->WriteSentinel(458032263);
    (aWriter)->WriteBytes((&((aVar).resolution())), 4);
    // Sentinel = 'resolution'
    (aWriter)->WriteSentinel(399770709);
}

auto ParamTraits<::mozilla::PresState>::Read(IPC::MessageReader* aReader) -> IPC::ReadResult<paramType>
{
    auto maybe___contentData = IPC::ReadParam<::mozilla::PresContentData>(aReader);
    if (!maybe___contentData) {
        aReader->FatalError("Error deserializing 'contentData' (PresContentData) member of 'PresState'");
        return {};

    }
    auto& _contentData = *maybe___contentData;
    // Sentinel = 'contentData'
    if ((!((aReader)->ReadSentinel(456590454)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'contentData' (PresContentData) member of 'PresState'");
        return {};
    }
    auto maybe___scrollState = IPC::ReadParam<::nsPoint>(aReader);
    if (!maybe___scrollState) {
        aReader->FatalError("Error deserializing 'scrollState' (nsPoint) member of 'PresState'");
        return {};

    }
    auto& _scrollState = *maybe___scrollState;
    // Sentinel = 'scrollState'
    if ((!((aReader)->ReadSentinel(464454801)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'scrollState' (nsPoint) member of 'PresState'");
        return {};
    }
    auto maybe___allowScrollOriginDowngrade = IPC::ReadParam<bool>(aReader);
    if (!maybe___allowScrollOriginDowngrade) {
        aReader->FatalError("Error deserializing 'allowScrollOriginDowngrade' (bool) member of 'PresState'");
        return {};

    }
    auto& _allowScrollOriginDowngrade = *maybe___allowScrollOriginDowngrade;
    // Sentinel = 'allowScrollOriginDowngrade'
    if ((!((aReader)->ReadSentinel(2402224786)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'allowScrollOriginDowngrade' (bool) member of 'PresState'");
        return {};
    }
    auto maybe___disabledSet = IPC::ReadParam<bool>(aReader);
    if (!maybe___disabledSet) {
        aReader->FatalError("Error deserializing 'disabledSet' (bool) member of 'PresState'");
        return {};

    }
    auto& _disabledSet = *maybe___disabledSet;
    // Sentinel = 'disabledSet'
    if ((!((aReader)->ReadSentinel(444204133)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'disabledSet' (bool) member of 'PresState'");
        return {};
    }
    auto maybe___disabled = IPC::ReadParam<bool>(aReader);
    if (!maybe___disabled) {
        aReader->FatalError("Error deserializing 'disabled' (bool) member of 'PresState'");
        return {};

    }
    auto& _disabled = *maybe___disabled;
    // Sentinel = 'disabled'
    if ((!((aReader)->ReadSentinel(244843321)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'disabled' (bool) member of 'PresState'");
        return {};
    }
    auto maybe___droppedDown = IPC::ReadParam<bool>(aReader);
    if (!maybe___droppedDown) {
        aReader->FatalError("Error deserializing 'droppedDown' (bool) member of 'PresState'");
        return {};

    }
    auto& _droppedDown = *maybe___droppedDown;
    // Sentinel = 'droppedDown'
    if ((!((aReader)->ReadSentinel(458032263)))) {
        mozilla::ipc::SentinelReadError("Error deserializing 'droppedDown' (bool) member of 'PresState'");
        return {};
    }
    IPC::ReadResult<paramType> result__{
            std::in_place,
            std::move(_contentData),
            std::move(_scrollState),
            std::move(_allowScrollOriginDowngrade),
            float{0},
            std::move(_disabledSet),
            std::move(_disabled),
            std::move(_droppedDown)};
    if ((!((aReader)->ReadBytesInto((&((result__)->resolution())), 4)))) {
        aReader->FatalError("Error bulk reading fields from float");
        return {};
    }
    // Sentinel = 'resolution'
    if ((!((aReader)->ReadSentinel(399770709)))) {
        mozilla::ipc::SentinelReadError("Error bulk reading fields from float");
        return {};
    }
    return result__;
}

} // namespace IPC
