blob: 2197d91786a943076f35d099a332f23de8c4471c [file] [log] [blame]
// mojo/public/interfaces/bindings/tests/struct_with_traits.mojom-blink.h is auto generated by mojom_bindings_generator.py, do not edit
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef MOJO_PUBLIC_INTERFACES_BINDINGS_TESTS_STRUCT_WITH_TRAITS_MOJOM_BLINK_H_
#define MOJO_PUBLIC_INTERFACES_BINDINGS_TESTS_STRUCT_WITH_TRAITS_MOJOM_BLINK_H_
#include <stdint.h>
#include <limits>
#include <type_traits>
#include <utility>
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "mojo/public/cpp/bindings/clone_traits.h"
#include "mojo/public/cpp/bindings/equals_traits.h"
#include "mojo/public/cpp/bindings/lib/serialization.h"
#include "mojo/public/cpp/bindings/struct_ptr.h"
#include "mojo/public/cpp/bindings/struct_traits.h"
#include "mojo/public/cpp/bindings/union_traits.h"
#include "third_party/perfetto/include/perfetto/tracing/traced_value_forward.h"
#include "mojo/public/interfaces/bindings/tests/struct_with_traits.mojom-shared.h"
#include "mojo/public/interfaces/bindings/tests/struct_with_traits.mojom-blink-forward.h"
#include "mojo/public/cpp/bindings/lib/wtf_clone_equals_util.h"
#include "mojo/public/cpp/bindings/lib/wtf_hash_util.h"
#include "third_party/blink/renderer/platform/wtf/hash_functions.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
#include "mojo/public/cpp/bindings/lib/control_message_handler.h"
#include "mojo/public/cpp/bindings/raw_ptr_impl_ref_traits.h"
#ifdef KYTHE_IS_RUNNING
#pragma kythe_inline_metadata "Metadata comment"
#endif
namespace WTF {
struct mojo_test_internal_EnumWithTraits_DataHashFn {
static unsigned GetHash(const ::mojo::test::EnumWithTraits& value) {
using utype = std::underlying_type<::mojo::test::EnumWithTraits>::type;
return DefaultHash<utype>::Hash().GetHash(static_cast<utype>(value));
}
static bool Equal(const ::mojo::test::EnumWithTraits& left, const ::mojo::test::EnumWithTraits& right) {
return left == right;
}
static const bool safe_to_compare_to_empty_or_deleted = true;
};
template <>
struct HashTraits<::mojo::test::EnumWithTraits>
: public GenericHashTraits<::mojo::test::EnumWithTraits> {
static_assert(true,
"-1000000 is a reserved enum value");
static_assert(true,
"-1000001 is a reserved enum value");
static const bool kEmptyValueIsZero = false;
static ::mojo::test::EnumWithTraits EmptyValue() { return static_cast<::mojo::test::EnumWithTraits>(-1000000); }
static void ConstructDeletedValue(::mojo::test::EnumWithTraits& slot, bool) {
slot = static_cast<::mojo::test::EnumWithTraits>(-1000001);
}
static bool IsDeletedValue(const ::mojo::test::EnumWithTraits& value) {
return value == static_cast<::mojo::test::EnumWithTraits>(-1000001);
}
};
} // namespace WTF
namespace mojo {
namespace test {
namespace blink {
class TraitsTestServiceProxy;
template <typename ImplRefTraits>
class TraitsTestServiceStub;
class TraitsTestServiceRequestValidator;
class TraitsTestServiceResponseValidator;
// @generated_from: mojo.test.TraitsTestService
class TraitsTestService
: public TraitsTestServiceInterfaceBase {
public:
static const char Name_[];
static std::pair<uint32_t, const void*> MessageToMethodInfo_(mojo::Message& message);
static const char* MessageToMethodName_(mojo::Message& message);
static constexpr uint32_t Version_ = 0;
static constexpr bool PassesAssociatedKinds_ = false;
static constexpr bool HasSyncMethods_ = false;
static constexpr bool HasUninterruptableMethods_ = false;
using Base_ = TraitsTestServiceInterfaceBase;
using Proxy_ = TraitsTestServiceProxy;
template <typename ImplRefTraits>
using Stub_ = TraitsTestServiceStub<ImplRefTraits>;
using RequestValidator_ = TraitsTestServiceRequestValidator;
using ResponseValidator_ = TraitsTestServiceResponseValidator;
enum MethodMinVersions : uint32_t {
kEchoStructWithTraitsMinVersion = 0,
kEchoTrivialStructWithTraitsMinVersion = 0,
kEchoMoveOnlyStructWithTraitsMinVersion = 0,
kEchoNullableMoveOnlyStructWithTraitsMinVersion = 0,
kEchoEnumWithTraitsMinVersion = 0,
kEchoStructWithTraitsForUniquePtrMinVersion = 0,
kEchoNullableStructWithTraitsForUniquePtrMinVersion = 0,
kEchoUnionWithTraitsMinVersion = 0,
};
// crbug.com/1340245 - this causes binary size bloat on Fuchsia, and we're OK
// with not having this data in traces there.
#if !BUILDFLAG(IS_FUCHSIA)
struct EchoStructWithTraits_Sym {
NOINLINE static void IPCSymbol();
};
struct EchoTrivialStructWithTraits_Sym {
NOINLINE static void IPCSymbol();
};
struct EchoMoveOnlyStructWithTraits_Sym {
NOINLINE static void IPCSymbol();
};
struct EchoNullableMoveOnlyStructWithTraits_Sym {
NOINLINE static void IPCSymbol();
};
struct EchoEnumWithTraits_Sym {
NOINLINE static void IPCSymbol();
};
struct EchoStructWithTraitsForUniquePtr_Sym {
NOINLINE static void IPCSymbol();
};
struct EchoNullableStructWithTraitsForUniquePtr_Sym {
NOINLINE static void IPCSymbol();
};
struct EchoUnionWithTraits_Sym {
NOINLINE static void IPCSymbol();
};
#endif // !BUILDFLAG(IS_FUCHSIA)
virtual ~TraitsTestService() = default;
using EchoStructWithTraitsCallback = base::OnceCallback<void(StructWithTraitsPtr)>;
// @generated_from: mojo.test.TraitsTestService.EchoStructWithTraits
virtual void EchoStructWithTraits(StructWithTraitsPtr s, EchoStructWithTraitsCallback callback) = 0;
using EchoTrivialStructWithTraitsCallback = base::OnceCallback<void(TrivialStructWithTraitsPtr)>;
// @generated_from: mojo.test.TraitsTestService.EchoTrivialStructWithTraits
virtual void EchoTrivialStructWithTraits(TrivialStructWithTraitsPtr s, EchoTrivialStructWithTraitsCallback callback) = 0;
using EchoMoveOnlyStructWithTraitsCallback = base::OnceCallback<void(MoveOnlyStructWithTraitsPtr)>;
// @generated_from: mojo.test.TraitsTestService.EchoMoveOnlyStructWithTraits
virtual void EchoMoveOnlyStructWithTraits(MoveOnlyStructWithTraitsPtr s, EchoMoveOnlyStructWithTraitsCallback callback) = 0;
using EchoNullableMoveOnlyStructWithTraitsCallback = base::OnceCallback<void(MoveOnlyStructWithTraitsPtr)>;
// @generated_from: mojo.test.TraitsTestService.EchoNullableMoveOnlyStructWithTraits
virtual void EchoNullableMoveOnlyStructWithTraits(MoveOnlyStructWithTraitsPtr s, EchoNullableMoveOnlyStructWithTraitsCallback callback) = 0;
using EchoEnumWithTraitsCallback = base::OnceCallback<void(EnumWithTraits)>;
// @generated_from: mojo.test.TraitsTestService.EchoEnumWithTraits
virtual void EchoEnumWithTraits(EnumWithTraits e, EchoEnumWithTraitsCallback callback) = 0;
using EchoStructWithTraitsForUniquePtrCallback = base::OnceCallback<void(StructWithTraitsForUniquePtrPtr)>;
// @generated_from: mojo.test.TraitsTestService.EchoStructWithTraitsForUniquePtr
virtual void EchoStructWithTraitsForUniquePtr(StructWithTraitsForUniquePtrPtr e, EchoStructWithTraitsForUniquePtrCallback callback) = 0;
using EchoNullableStructWithTraitsForUniquePtrCallback = base::OnceCallback<void(StructWithTraitsForUniquePtrPtr)>;
// @generated_from: mojo.test.TraitsTestService.EchoNullableStructWithTraitsForUniquePtr
virtual void EchoNullableStructWithTraitsForUniquePtr(StructWithTraitsForUniquePtrPtr e, EchoNullableStructWithTraitsForUniquePtrCallback callback) = 0;
using EchoUnionWithTraitsCallback = base::OnceCallback<void(UnionWithTraitsPtr)>;
// @generated_from: mojo.test.TraitsTestService.EchoUnionWithTraits
virtual void EchoUnionWithTraits(UnionWithTraitsPtr u, EchoUnionWithTraitsCallback callback) = 0;
};
class TestUnserializedStructProxy;
template <typename ImplRefTraits>
class TestUnserializedStructStub;
class TestUnserializedStructRequestValidator;
class TestUnserializedStructResponseValidator;
// @generated_from: mojo.test.TestUnserializedStruct
class TestUnserializedStruct
: public TestUnserializedStructInterfaceBase {
public:
static const char Name_[];
static std::pair<uint32_t, const void*> MessageToMethodInfo_(mojo::Message& message);
static const char* MessageToMethodName_(mojo::Message& message);
static constexpr uint32_t Version_ = 0;
static constexpr bool PassesAssociatedKinds_ = false;
static constexpr bool HasSyncMethods_ = false;
static constexpr bool HasUninterruptableMethods_ = false;
using Base_ = TestUnserializedStructInterfaceBase;
using Proxy_ = TestUnserializedStructProxy;
template <typename ImplRefTraits>
using Stub_ = TestUnserializedStructStub<ImplRefTraits>;
using RequestValidator_ = TestUnserializedStructRequestValidator;
using ResponseValidator_ = TestUnserializedStructResponseValidator;
enum MethodMinVersions : uint32_t {
kPassUnserializedStructMinVersion = 0,
};
// crbug.com/1340245 - this causes binary size bloat on Fuchsia, and we're OK
// with not having this data in traces there.
#if !BUILDFLAG(IS_FUCHSIA)
struct PassUnserializedStruct_Sym {
NOINLINE static void IPCSymbol();
};
#endif // !BUILDFLAG(IS_FUCHSIA)
virtual ~TestUnserializedStruct() = default;
using PassUnserializedStructCallback = base::OnceCallback<void(StructWithUnreachableTraitsPtr)>;
// @generated_from: mojo.test.TestUnserializedStruct.PassUnserializedStruct
virtual void PassUnserializedStruct(StructWithUnreachableTraitsPtr s, PassUnserializedStructCallback callback) = 0;
};
class ForceSerializeTesterProxy;
template <typename ImplRefTraits>
class ForceSerializeTesterStub;
class ForceSerializeTesterRequestValidator;
class ForceSerializeTesterResponseValidator;
// @generated_from: mojo.test.ForceSerializeTester
class ForceSerializeTester
: public ForceSerializeTesterInterfaceBase {
public:
static const char Name_[];
static std::pair<uint32_t, const void*> MessageToMethodInfo_(mojo::Message& message);
static const char* MessageToMethodName_(mojo::Message& message);
static constexpr uint32_t Version_ = 0;
static constexpr bool PassesAssociatedKinds_ = false;
static constexpr bool HasSyncMethods_ = false;
static constexpr bool HasUninterruptableMethods_ = false;
using Base_ = ForceSerializeTesterInterfaceBase;
using Proxy_ = ForceSerializeTesterProxy;
template <typename ImplRefTraits>
using Stub_ = ForceSerializeTesterStub<ImplRefTraits>;
using RequestValidator_ = ForceSerializeTesterRequestValidator;
using ResponseValidator_ = ForceSerializeTesterResponseValidator;
enum MethodMinVersions : uint32_t {
kSendForceSerializedStructMinVersion = 0,
kSendNestedForceSerializedStructMinVersion = 0,
};
// crbug.com/1340245 - this causes binary size bloat on Fuchsia, and we're OK
// with not having this data in traces there.
#if !BUILDFLAG(IS_FUCHSIA)
struct SendForceSerializedStruct_Sym {
NOINLINE static void IPCSymbol();
};
struct SendNestedForceSerializedStruct_Sym {
NOINLINE static void IPCSymbol();
};
#endif // !BUILDFLAG(IS_FUCHSIA)
virtual ~ForceSerializeTester() = default;
using SendForceSerializedStructCallback = base::OnceCallback<void(StructForceSerializePtr)>;
// @generated_from: mojo.test.ForceSerializeTester.SendForceSerializedStruct
virtual void SendForceSerializedStruct(StructForceSerializePtr s, SendForceSerializedStructCallback callback) = 0;
using SendNestedForceSerializedStructCallback = base::OnceCallback<void(StructNestedForceSerializePtr)>;
// @generated_from: mojo.test.ForceSerializeTester.SendNestedForceSerializedStruct
virtual void SendNestedForceSerializedStruct(StructNestedForceSerializePtr s, SendNestedForceSerializedStructCallback callback) = 0;
};
// @generated_from: mojo.test.TraitsTestService
class TraitsTestServiceProxy
: public TraitsTestService {
public:
using InterfaceType = TraitsTestService;
explicit TraitsTestServiceProxy(mojo::MessageReceiverWithResponder* receiver);
// @generated_from: mojo.test.TraitsTestService.EchoStructWithTraits
void EchoStructWithTraits(StructWithTraitsPtr s, EchoStructWithTraitsCallback callback) final;
// @generated_from: mojo.test.TraitsTestService.EchoTrivialStructWithTraits
void EchoTrivialStructWithTraits(TrivialStructWithTraitsPtr s, EchoTrivialStructWithTraitsCallback callback) final;
// @generated_from: mojo.test.TraitsTestService.EchoMoveOnlyStructWithTraits
void EchoMoveOnlyStructWithTraits(MoveOnlyStructWithTraitsPtr s, EchoMoveOnlyStructWithTraitsCallback callback) final;
// @generated_from: mojo.test.TraitsTestService.EchoNullableMoveOnlyStructWithTraits
void EchoNullableMoveOnlyStructWithTraits(MoveOnlyStructWithTraitsPtr s, EchoNullableMoveOnlyStructWithTraitsCallback callback) final;
// @generated_from: mojo.test.TraitsTestService.EchoEnumWithTraits
void EchoEnumWithTraits(EnumWithTraits e, EchoEnumWithTraitsCallback callback) final;
// @generated_from: mojo.test.TraitsTestService.EchoStructWithTraitsForUniquePtr
void EchoStructWithTraitsForUniquePtr(StructWithTraitsForUniquePtrPtr e, EchoStructWithTraitsForUniquePtrCallback callback) final;
// @generated_from: mojo.test.TraitsTestService.EchoNullableStructWithTraitsForUniquePtr
void EchoNullableStructWithTraitsForUniquePtr(StructWithTraitsForUniquePtrPtr e, EchoNullableStructWithTraitsForUniquePtrCallback callback) final;
// @generated_from: mojo.test.TraitsTestService.EchoUnionWithTraits
void EchoUnionWithTraits(UnionWithTraitsPtr u, EchoUnionWithTraitsCallback callback) final;
private:
mojo::MessageReceiverWithResponder* receiver_;
};
// @generated_from: mojo.test.TestUnserializedStruct
class TestUnserializedStructProxy
: public TestUnserializedStruct {
public:
using InterfaceType = TestUnserializedStruct;
explicit TestUnserializedStructProxy(mojo::MessageReceiverWithResponder* receiver);
// @generated_from: mojo.test.TestUnserializedStruct.PassUnserializedStruct
void PassUnserializedStruct(StructWithUnreachableTraitsPtr s, PassUnserializedStructCallback callback) final;
private:
mojo::MessageReceiverWithResponder* receiver_;
};
// @generated_from: mojo.test.ForceSerializeTester
class ForceSerializeTesterProxy
: public ForceSerializeTester {
public:
using InterfaceType = ForceSerializeTester;
explicit ForceSerializeTesterProxy(mojo::MessageReceiverWithResponder* receiver);
// @generated_from: mojo.test.ForceSerializeTester.SendForceSerializedStruct
void SendForceSerializedStruct(StructForceSerializePtr s, SendForceSerializedStructCallback callback) final;
// @generated_from: mojo.test.ForceSerializeTester.SendNestedForceSerializedStruct
void SendNestedForceSerializedStruct(StructNestedForceSerializePtr s, SendNestedForceSerializedStructCallback callback) final;
private:
mojo::MessageReceiverWithResponder* receiver_;
};
class TraitsTestServiceStubDispatch {
public:
static bool Accept(TraitsTestService* impl, mojo::Message* message);
static bool AcceptWithResponder(
TraitsTestService* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<TraitsTestService>>
class TraitsTestServiceStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
TraitsTestServiceStub() = default;
~TraitsTestServiceStub() override = default;
void set_sink(ImplPointerType sink) { sink_ = std::move(sink); }
ImplPointerType& sink() { return sink_; }
bool Accept(mojo::Message* message) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return TraitsTestServiceStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return TraitsTestServiceStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class TestUnserializedStructStubDispatch {
public:
static bool Accept(TestUnserializedStruct* impl, mojo::Message* message);
static bool AcceptWithResponder(
TestUnserializedStruct* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<TestUnserializedStruct>>
class TestUnserializedStructStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
TestUnserializedStructStub() = default;
~TestUnserializedStructStub() override = default;
void set_sink(ImplPointerType sink) { sink_ = std::move(sink); }
ImplPointerType& sink() { return sink_; }
bool Accept(mojo::Message* message) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return TestUnserializedStructStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return TestUnserializedStructStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class ForceSerializeTesterStubDispatch {
public:
static bool Accept(ForceSerializeTester* impl, mojo::Message* message);
static bool AcceptWithResponder(
ForceSerializeTester* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<ForceSerializeTester>>
class ForceSerializeTesterStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
ForceSerializeTesterStub() = default;
~ForceSerializeTesterStub() override = default;
void set_sink(ImplPointerType sink) { sink_ = std::move(sink); }
ImplPointerType& sink() { return sink_; }
bool Accept(mojo::Message* message) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return ForceSerializeTesterStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return ForceSerializeTesterStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class TraitsTestServiceRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class TestUnserializedStructRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class ForceSerializeTesterRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class TraitsTestServiceResponseValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class TestUnserializedStructResponseValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class ForceSerializeTesterResponseValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
// @generated_from: mojo.test.NestedStructWithTraits
class NestedStructWithTraits {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<NestedStructWithTraits, T>::value>;
using DataView = NestedStructWithTraitsDataView;
using Data_ = internal::NestedStructWithTraits_Data;
template <typename... Args>
static NestedStructWithTraitsPtr New(Args&&... args) {
return NestedStructWithTraitsPtr(
absl::in_place, std::forward<Args>(args)...);
}
template <typename U>
static NestedStructWithTraitsPtr From(const U& u) {
return mojo::TypeConverter<NestedStructWithTraitsPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, NestedStructWithTraits>::Convert(*this);
}
NestedStructWithTraits();
explicit NestedStructWithTraits(
int32_t value);
~NestedStructWithTraits();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = NestedStructWithTraitsPtr>
NestedStructWithTraitsPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, NestedStructWithTraits::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, NestedStructWithTraits::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
size_t Hash(size_t seed) const;
template <typename UserType>
static WTF::Vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
NestedStructWithTraits::DataView, WTF::Vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
NestedStructWithTraits::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::NestedStructWithTraits_UnserializedMessageContext<
UserType, NestedStructWithTraits::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<NestedStructWithTraits::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const WTF::Vector<uint8_t>& input,
UserType* output) {
return NestedStructWithTraits::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::NestedStructWithTraits_UnserializedMessageContext<
UserType, NestedStructWithTraits::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<NestedStructWithTraits::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: mojo.test.NestedStructWithTraits.value
int32_t value;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, NestedStructWithTraits::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, NestedStructWithTraits::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, NestedStructWithTraits::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, NestedStructWithTraits::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: mojo.test.StructWithUnreachableTraits
class StructWithUnreachableTraits {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<StructWithUnreachableTraits, T>::value>;
using DataView = StructWithUnreachableTraitsDataView;
using Data_ = internal::StructWithUnreachableTraits_Data;
template <typename... Args>
static StructWithUnreachableTraitsPtr New(Args&&... args) {
return StructWithUnreachableTraitsPtr(
absl::in_place, std::forward<Args>(args)...);
}
template <typename U>
static StructWithUnreachableTraitsPtr From(const U& u) {
return mojo::TypeConverter<StructWithUnreachableTraitsPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, StructWithUnreachableTraits>::Convert(*this);
}
StructWithUnreachableTraits();
explicit StructWithUnreachableTraits(
bool ignore_me);
~StructWithUnreachableTraits();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = StructWithUnreachableTraitsPtr>
StructWithUnreachableTraitsPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, StructWithUnreachableTraits::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, StructWithUnreachableTraits::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
size_t Hash(size_t seed) const;
template <typename UserType>
static WTF::Vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
StructWithUnreachableTraits::DataView, WTF::Vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
StructWithUnreachableTraits::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::StructWithUnreachableTraits_UnserializedMessageContext<
UserType, StructWithUnreachableTraits::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<StructWithUnreachableTraits::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const WTF::Vector<uint8_t>& input,
UserType* output) {
return StructWithUnreachableTraits::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::StructWithUnreachableTraits_UnserializedMessageContext<
UserType, StructWithUnreachableTraits::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<StructWithUnreachableTraits::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: mojo.test.StructWithUnreachableTraits.ignore_me
bool ignore_me;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, StructWithUnreachableTraits::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, StructWithUnreachableTraits::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, StructWithUnreachableTraits::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, StructWithUnreachableTraits::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: mojo.test.TrivialStructWithTraits
class TrivialStructWithTraits {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<TrivialStructWithTraits, T>::value>;
using DataView = TrivialStructWithTraitsDataView;
using Data_ = internal::TrivialStructWithTraits_Data;
template <typename... Args>
static TrivialStructWithTraitsPtr New(Args&&... args) {
return TrivialStructWithTraitsPtr(
absl::in_place, std::forward<Args>(args)...);
}
template <typename U>
static TrivialStructWithTraitsPtr From(const U& u) {
return mojo::TypeConverter<TrivialStructWithTraitsPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, TrivialStructWithTraits>::Convert(*this);
}
TrivialStructWithTraits();
explicit TrivialStructWithTraits(
int32_t value);
~TrivialStructWithTraits();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = TrivialStructWithTraitsPtr>
TrivialStructWithTraitsPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, TrivialStructWithTraits::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, TrivialStructWithTraits::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
size_t Hash(size_t seed) const;
template <typename UserType>
static WTF::Vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
TrivialStructWithTraits::DataView, WTF::Vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
TrivialStructWithTraits::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::TrivialStructWithTraits_UnserializedMessageContext<
UserType, TrivialStructWithTraits::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<TrivialStructWithTraits::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const WTF::Vector<uint8_t>& input,
UserType* output) {
return TrivialStructWithTraits::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::TrivialStructWithTraits_UnserializedMessageContext<
UserType, TrivialStructWithTraits::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<TrivialStructWithTraits::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: mojo.test.TrivialStructWithTraits.value
int32_t value;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, TrivialStructWithTraits::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, TrivialStructWithTraits::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, TrivialStructWithTraits::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, TrivialStructWithTraits::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: mojo.test.StructWithTraitsForUniquePtr
class StructWithTraitsForUniquePtr {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<StructWithTraitsForUniquePtr, T>::value>;
using DataView = StructWithTraitsForUniquePtrDataView;
using Data_ = internal::StructWithTraitsForUniquePtr_Data;
template <typename... Args>
static StructWithTraitsForUniquePtrPtr New(Args&&... args) {
return StructWithTraitsForUniquePtrPtr(
absl::in_place, std::forward<Args>(args)...);
}
template <typename U>
static StructWithTraitsForUniquePtrPtr From(const U& u) {
return mojo::TypeConverter<StructWithTraitsForUniquePtrPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, StructWithTraitsForUniquePtr>::Convert(*this);
}
StructWithTraitsForUniquePtr();
explicit StructWithTraitsForUniquePtr(
int32_t f_int32);
~StructWithTraitsForUniquePtr();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = StructWithTraitsForUniquePtrPtr>
StructWithTraitsForUniquePtrPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, StructWithTraitsForUniquePtr::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, StructWithTraitsForUniquePtr::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
size_t Hash(size_t seed) const;
template <typename UserType>
static WTF::Vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
StructWithTraitsForUniquePtr::DataView, WTF::Vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
StructWithTraitsForUniquePtr::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::StructWithTraitsForUniquePtr_UnserializedMessageContext<
UserType, StructWithTraitsForUniquePtr::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<StructWithTraitsForUniquePtr::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const WTF::Vector<uint8_t>& input,
UserType* output) {
return StructWithTraitsForUniquePtr::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::StructWithTraitsForUniquePtr_UnserializedMessageContext<
UserType, StructWithTraitsForUniquePtr::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<StructWithTraitsForUniquePtr::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: mojo.test.StructWithTraitsForUniquePtr.f_int32
int32_t f_int32;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, StructWithTraitsForUniquePtr::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, StructWithTraitsForUniquePtr::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, StructWithTraitsForUniquePtr::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, StructWithTraitsForUniquePtr::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: mojo.test.EnumWithTraitsContainer
class EnumWithTraitsContainer {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<EnumWithTraitsContainer, T>::value>;
using DataView = EnumWithTraitsContainerDataView;
using Data_ = internal::EnumWithTraitsContainer_Data;
template <typename... Args>
static EnumWithTraitsContainerPtr New(Args&&... args) {
return EnumWithTraitsContainerPtr(
absl::in_place, std::forward<Args>(args)...);
}
template <typename U>
static EnumWithTraitsContainerPtr From(const U& u) {
return mojo::TypeConverter<EnumWithTraitsContainerPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, EnumWithTraitsContainer>::Convert(*this);
}
EnumWithTraitsContainer();
explicit EnumWithTraitsContainer(
EnumWithTraits f_field);
~EnumWithTraitsContainer();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = EnumWithTraitsContainerPtr>
EnumWithTraitsContainerPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, EnumWithTraitsContainer::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, EnumWithTraitsContainer::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
size_t Hash(size_t seed) const;
template <typename UserType>
static WTF::Vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
EnumWithTraitsContainer::DataView, WTF::Vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
EnumWithTraitsContainer::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::EnumWithTraitsContainer_UnserializedMessageContext<
UserType, EnumWithTraitsContainer::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<EnumWithTraitsContainer::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const WTF::Vector<uint8_t>& input,
UserType* output) {
return EnumWithTraitsContainer::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::EnumWithTraitsContainer_UnserializedMessageContext<
UserType, EnumWithTraitsContainer::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<EnumWithTraitsContainer::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: mojo.test.EnumWithTraitsContainer.f_field
EnumWithTraits f_field;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, EnumWithTraitsContainer::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, EnumWithTraitsContainer::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, EnumWithTraitsContainer::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, EnumWithTraitsContainer::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: mojo.test.StructForceSerialize
class StructForceSerialize {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<StructForceSerialize, T>::value>;
using DataView = StructForceSerializeDataView;
using Data_ = internal::StructForceSerialize_Data;
template <typename... Args>
static StructForceSerializePtr New(Args&&... args) {
return StructForceSerializePtr(
absl::in_place, std::forward<Args>(args)...);
}
template <typename U>
static StructForceSerializePtr From(const U& u) {
return mojo::TypeConverter<StructForceSerializePtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, StructForceSerialize>::Convert(*this);
}
StructForceSerialize();
explicit StructForceSerialize(
int32_t value);
~StructForceSerialize();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = StructForceSerializePtr>
StructForceSerializePtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, StructForceSerialize::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, StructForceSerialize::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
size_t Hash(size_t seed) const;
template <typename UserType>
static WTF::Vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
StructForceSerialize::DataView, WTF::Vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
StructForceSerialize::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::StructForceSerialize_UnserializedMessageContext<
UserType, StructForceSerialize::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<StructForceSerialize::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const WTF::Vector<uint8_t>& input,
UserType* output) {
return StructForceSerialize::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::StructForceSerialize_UnserializedMessageContext<
UserType, StructForceSerialize::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<StructForceSerialize::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: mojo.test.StructForceSerialize.value
int32_t value;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, StructForceSerialize::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, StructForceSerialize::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, StructForceSerialize::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, StructForceSerialize::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: mojo.test.UnionWithTraits
class UnionWithTraits {
public:
using DataView = UnionWithTraitsDataView;
using Data_ = internal::UnionWithTraits_Data;
using Tag = Data_::UnionWithTraits_Tag;
template <typename... Args>
static UnionWithTraitsPtr New(Args&&... args) {
static_assert(
sizeof...(args) < 0,
"Do not use Union::New(); to create a union of a given subtype, use "
"New<SubType>(), not New() followed by set_<sub_type>(). To represent "
"an empty union, mark the field or parameter as nullable in the mojom "
"definition.");
}
// Construct an instance holding |f_int32|.
static UnionWithTraitsPtr
NewFInt32(
int32_t f_int32) {
auto result = UnionWithTraitsPtr(absl::in_place);
result->set_f_int32(std::move(f_int32));
return result;
}
// Construct an instance holding |f_struct|.
static UnionWithTraitsPtr
NewFStruct(
NestedStructWithTraitsPtr f_struct) {
auto result = UnionWithTraitsPtr(absl::in_place);
result->set_f_struct(std::move(f_struct));
return result;
}
template <typename U>
static UnionWithTraitsPtr From(const U& u) {
return mojo::TypeConverter<UnionWithTraitsPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, UnionWithTraits>::Convert(*this);
}
UnionWithTraits();
~UnionWithTraits();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename UnionPtrType = UnionWithTraitsPtr>
UnionWithTraitsPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T,
typename std::enable_if<std::is_same<
T, UnionWithTraits>::value>::type* = nullptr>
bool Equals(const T& other) const;
template <typename T,
typename std::enable_if<std::is_same<
T, UnionWithTraits>::value>::type* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
size_t Hash(size_t seed) const;
Tag which() const {
return tag_;
}
// @generated_from: mojo.test.UnionWithTraits.f_int32
bool is_f_int32() const { return tag_ == Tag::kFInt32; }
// @generated_from: mojo.test.UnionWithTraits.f_int32
int32_t get_f_int32() const {
CHECK(tag_ == Tag::kFInt32);
return data_.f_int32;
}
// @generated_from: mojo.test.UnionWithTraits.f_int32
void set_f_int32(
int32_t f_int32);
// @generated_from: mojo.test.UnionWithTraits.f_struct
bool is_f_struct() const { return tag_ == Tag::kFStruct; }
// @generated_from: mojo.test.UnionWithTraits.f_struct
NestedStructWithTraitsPtr& get_f_struct() const {
CHECK(tag_ == Tag::kFStruct);
return *(data_.f_struct);
}
// @generated_from: mojo.test.UnionWithTraits.f_struct
void set_f_struct(
NestedStructWithTraitsPtr f_struct);
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
UnionWithTraits::DataView>(input);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
return mojo::internal::DeserializeImpl<UnionWithTraits::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
private:
union Union_ {
Union_() = default;
~Union_() = default;
int32_t f_int32;
NestedStructWithTraitsPtr* f_struct;
};
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
void DestroyActive();
Tag tag_;
Union_ data_;
};
// @generated_from: mojo.test.StructWithTraits
class StructWithTraits {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<StructWithTraits, T>::value>;
using DataView = StructWithTraitsDataView;
using Data_ = internal::StructWithTraits_Data;
template <typename... Args>
static StructWithTraitsPtr New(Args&&... args) {
return StructWithTraitsPtr(
absl::in_place, std::forward<Args>(args)...);
}
template <typename U>
static StructWithTraitsPtr From(const U& u) {
return mojo::TypeConverter<StructWithTraitsPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, StructWithTraits>::Convert(*this);
}
StructWithTraits();
StructWithTraits(
EnumWithTraits f_enum,
bool f_bool,
uint32_t f_uint32,
uint64_t f_uint64,
const WTF::String& f_string,
const WTF::String& f_string2,
WTF::Vector<WTF::String> f_string_array,
WTF::Vector<WTF::String> f_string_set,
NestedStructWithTraitsPtr f_struct,
WTF::Vector<NestedStructWithTraitsPtr> f_struct_array,
WTF::HashMap<WTF::String, NestedStructWithTraitsPtr> f_struct_map);
StructWithTraits(const StructWithTraits&) = delete;
StructWithTraits& operator=(const StructWithTraits&) = delete;
~StructWithTraits();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = StructWithTraitsPtr>
StructWithTraitsPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, StructWithTraits::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, StructWithTraits::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename UserType>
static WTF::Vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
StructWithTraits::DataView, WTF::Vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
StructWithTraits::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::StructWithTraits_UnserializedMessageContext<
UserType, StructWithTraits::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<StructWithTraits::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const WTF::Vector<uint8_t>& input,
UserType* output) {
return StructWithTraits::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::StructWithTraits_UnserializedMessageContext<
UserType, StructWithTraits::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<StructWithTraits::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: mojo.test.StructWithTraits.f_enum
EnumWithTraits f_enum;
// @generated_from: mojo.test.StructWithTraits.f_bool
bool f_bool;
// @generated_from: mojo.test.StructWithTraits.f_uint32
uint32_t f_uint32;
// @generated_from: mojo.test.StructWithTraits.f_uint64
uint64_t f_uint64;
// @generated_from: mojo.test.StructWithTraits.f_string
WTF::String f_string;
// @generated_from: mojo.test.StructWithTraits.f_string2
WTF::String f_string2;
// @generated_from: mojo.test.StructWithTraits.f_string_array
WTF::Vector<WTF::String> f_string_array;
// @generated_from: mojo.test.StructWithTraits.f_string_set
WTF::Vector<WTF::String> f_string_set;
// @generated_from: mojo.test.StructWithTraits.f_struct
NestedStructWithTraitsPtr f_struct;
// @generated_from: mojo.test.StructWithTraits.f_struct_array
WTF::Vector<NestedStructWithTraitsPtr> f_struct_array;
// @generated_from: mojo.test.StructWithTraits.f_struct_map
WTF::HashMap<WTF::String, NestedStructWithTraitsPtr> f_struct_map;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, StructWithTraits::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, StructWithTraits::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, StructWithTraits::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, StructWithTraits::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: mojo.test.StructWithTraitsContainer
class StructWithTraitsContainer {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<StructWithTraitsContainer, T>::value>;
using DataView = StructWithTraitsContainerDataView;
using Data_ = internal::StructWithTraitsContainer_Data;
template <typename... Args>
static StructWithTraitsContainerPtr New(Args&&... args) {
return StructWithTraitsContainerPtr(
absl::in_place, std::forward<Args>(args)...);
}
template <typename U>
static StructWithTraitsContainerPtr From(const U& u) {
return mojo::TypeConverter<StructWithTraitsContainerPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, StructWithTraitsContainer>::Convert(*this);
}
StructWithTraitsContainer();
explicit StructWithTraitsContainer(
StructWithTraitsPtr f_struct);
StructWithTraitsContainer(const StructWithTraitsContainer&) = delete;
StructWithTraitsContainer& operator=(const StructWithTraitsContainer&) = delete;
~StructWithTraitsContainer();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = StructWithTraitsContainerPtr>
StructWithTraitsContainerPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, StructWithTraitsContainer::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, StructWithTraitsContainer::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename UserType>
static WTF::Vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
StructWithTraitsContainer::DataView, WTF::Vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
StructWithTraitsContainer::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::StructWithTraitsContainer_UnserializedMessageContext<
UserType, StructWithTraitsContainer::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<StructWithTraitsContainer::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const WTF::Vector<uint8_t>& input,
UserType* output) {
return StructWithTraitsContainer::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::StructWithTraitsContainer_UnserializedMessageContext<
UserType, StructWithTraitsContainer::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<StructWithTraitsContainer::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: mojo.test.StructWithTraitsContainer.f_struct
StructWithTraitsPtr f_struct;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, StructWithTraitsContainer::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, StructWithTraitsContainer::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, StructWithTraitsContainer::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, StructWithTraitsContainer::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: mojo.test.MoveOnlyStructWithTraits
class MoveOnlyStructWithTraits {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<MoveOnlyStructWithTraits, T>::value>;
using DataView = MoveOnlyStructWithTraitsDataView;
using Data_ = internal::MoveOnlyStructWithTraits_Data;
template <typename... Args>
static MoveOnlyStructWithTraitsPtr New(Args&&... args) {
return MoveOnlyStructWithTraitsPtr(
absl::in_place, std::forward<Args>(args)...);
}
template <typename U>
static MoveOnlyStructWithTraitsPtr From(const U& u) {
return mojo::TypeConverter<MoveOnlyStructWithTraitsPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, MoveOnlyStructWithTraits>::Convert(*this);
}
MoveOnlyStructWithTraits();
explicit MoveOnlyStructWithTraits(
::mojo::ScopedHandle f_handle);
MoveOnlyStructWithTraits(const MoveOnlyStructWithTraits&) = delete;
MoveOnlyStructWithTraits& operator=(const MoveOnlyStructWithTraits&) = delete;
~MoveOnlyStructWithTraits();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = MoveOnlyStructWithTraitsPtr>
MoveOnlyStructWithTraitsPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, MoveOnlyStructWithTraits::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, MoveOnlyStructWithTraits::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
MoveOnlyStructWithTraits::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::MoveOnlyStructWithTraits_UnserializedMessageContext<
UserType, MoveOnlyStructWithTraits::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<MoveOnlyStructWithTraits::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const WTF::Vector<uint8_t>& input,
UserType* output) {
return MoveOnlyStructWithTraits::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::MoveOnlyStructWithTraits_UnserializedMessageContext<
UserType, MoveOnlyStructWithTraits::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<MoveOnlyStructWithTraits::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: mojo.test.MoveOnlyStructWithTraits.f_handle
::mojo::ScopedHandle f_handle;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, MoveOnlyStructWithTraits::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, MoveOnlyStructWithTraits::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, MoveOnlyStructWithTraits::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, MoveOnlyStructWithTraits::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: mojo.test.MoveOnlyStructWithTraitsContainer
class MoveOnlyStructWithTraitsContainer {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<MoveOnlyStructWithTraitsContainer, T>::value>;
using DataView = MoveOnlyStructWithTraitsContainerDataView;
using Data_ = internal::MoveOnlyStructWithTraitsContainer_Data;
template <typename... Args>
static MoveOnlyStructWithTraitsContainerPtr New(Args&&... args) {
return MoveOnlyStructWithTraitsContainerPtr(
absl::in_place, std::forward<Args>(args)...);
}
template <typename U>
static MoveOnlyStructWithTraitsContainerPtr From(const U& u) {
return mojo::TypeConverter<MoveOnlyStructWithTraitsContainerPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, MoveOnlyStructWithTraitsContainer>::Convert(*this);
}
MoveOnlyStructWithTraitsContainer();
explicit MoveOnlyStructWithTraitsContainer(
MoveOnlyStructWithTraitsPtr f_struct);
MoveOnlyStructWithTraitsContainer(const MoveOnlyStructWithTraitsContainer&) = delete;
MoveOnlyStructWithTraitsContainer& operator=(const MoveOnlyStructWithTraitsContainer&) = delete;
~MoveOnlyStructWithTraitsContainer();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = MoveOnlyStructWithTraitsContainerPtr>
MoveOnlyStructWithTraitsContainerPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, MoveOnlyStructWithTraitsContainer::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, MoveOnlyStructWithTraitsContainer::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
MoveOnlyStructWithTraitsContainer::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::MoveOnlyStructWithTraitsContainer_UnserializedMessageContext<
UserType, MoveOnlyStructWithTraitsContainer::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<MoveOnlyStructWithTraitsContainer::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const WTF::Vector<uint8_t>& input,
UserType* output) {
return MoveOnlyStructWithTraitsContainer::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::MoveOnlyStructWithTraitsContainer_UnserializedMessageContext<
UserType, MoveOnlyStructWithTraitsContainer::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<MoveOnlyStructWithTraitsContainer::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: mojo.test.MoveOnlyStructWithTraitsContainer.f_struct
MoveOnlyStructWithTraitsPtr f_struct;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, MoveOnlyStructWithTraitsContainer::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, MoveOnlyStructWithTraitsContainer::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, MoveOnlyStructWithTraitsContainer::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, MoveOnlyStructWithTraitsContainer::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: mojo.test.StructNestedForceSerialize
class StructNestedForceSerialize {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<StructNestedForceSerialize, T>::value>;
using DataView = StructNestedForceSerializeDataView;
using Data_ = internal::StructNestedForceSerialize_Data;
template <typename... Args>
static StructNestedForceSerializePtr New(Args&&... args) {
return StructNestedForceSerializePtr(
absl::in_place, std::forward<Args>(args)...);
}
template <typename U>
static StructNestedForceSerializePtr From(const U& u) {
return mojo::TypeConverter<StructNestedForceSerializePtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, StructNestedForceSerialize>::Convert(*this);
}
StructNestedForceSerialize();
explicit StructNestedForceSerialize(
StructForceSerializePtr force);
StructNestedForceSerialize(const StructNestedForceSerialize&) = delete;
StructNestedForceSerialize& operator=(const StructNestedForceSerialize&) = delete;
~StructNestedForceSerialize();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = StructNestedForceSerializePtr>
StructNestedForceSerializePtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, StructNestedForceSerialize::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, StructNestedForceSerialize::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
size_t Hash(size_t seed) const;
template <typename UserType>
static WTF::Vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
StructNestedForceSerialize::DataView, WTF::Vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
StructNestedForceSerialize::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::StructNestedForceSerialize_UnserializedMessageContext<
UserType, StructNestedForceSerialize::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<StructNestedForceSerialize::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const WTF::Vector<uint8_t>& input,
UserType* output) {
return StructNestedForceSerialize::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::StructNestedForceSerialize_UnserializedMessageContext<
UserType, StructNestedForceSerialize::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<StructNestedForceSerialize::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: mojo.test.StructNestedForceSerialize.force
StructForceSerializePtr force;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, StructNestedForceSerialize::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, StructNestedForceSerialize::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, StructNestedForceSerialize::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, StructNestedForceSerialize::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
template <typename UnionPtrType>
UnionWithTraitsPtr UnionWithTraits::Clone() const {
switch (tag_) {
case Tag::kFInt32:
return NewFInt32(
mojo::Clone(data_.f_int32));
case Tag::kFStruct:
return NewFStruct(
mojo::Clone(*data_.f_struct));
}
return nullptr;
}
template <typename T,
typename std::enable_if<std::is_same<
T, UnionWithTraits>::value>::type*>
bool UnionWithTraits::Equals(const T& other) const {
if (tag_ != other.which())
return false;
switch (tag_) {
case Tag::kFInt32:
return mojo::Equals(data_.f_int32, other.data_.f_int32);
case Tag::kFStruct:
return mojo::Equals(*(data_.f_struct), *(other.data_.f_struct));
}
return false;
}
template <typename StructPtrType>
NestedStructWithTraitsPtr NestedStructWithTraits::Clone() const {
return New(
mojo::Clone(value)
);
}
template <typename T, NestedStructWithTraits::EnableIfSame<T>*>
bool NestedStructWithTraits::Equals(const T& other_struct) const {
if (!mojo::Equals(this->value, other_struct.value))
return false;
return true;
}
template <typename T, NestedStructWithTraits::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.value < rhs.value)
return true;
if (rhs.value < lhs.value)
return false;
return false;
}
template <typename StructPtrType>
StructWithTraitsPtr StructWithTraits::Clone() const {
return New(
mojo::Clone(f_enum),
mojo::Clone(f_bool),
mojo::Clone(f_uint32),
mojo::Clone(f_uint64),
mojo::Clone(f_string),
mojo::Clone(f_string2),
mojo::Clone(f_string_array),
mojo::Clone(f_string_set),
mojo::Clone(f_struct),
mojo::Clone(f_struct_array),
mojo::Clone(f_struct_map)
);
}
template <typename T, StructWithTraits::EnableIfSame<T>*>
bool StructWithTraits::Equals(const T& other_struct) const {
if (!mojo::Equals(this->f_enum, other_struct.f_enum))
return false;
if (!mojo::Equals(this->f_bool, other_struct.f_bool))
return false;
if (!mojo::Equals(this->f_uint32, other_struct.f_uint32))
return false;
if (!mojo::Equals(this->f_uint64, other_struct.f_uint64))
return false;
if (!mojo::Equals(this->f_string, other_struct.f_string))
return false;
if (!mojo::Equals(this->f_string2, other_struct.f_string2))
return false;
if (!mojo::Equals(this->f_string_array, other_struct.f_string_array))
return false;
if (!mojo::Equals(this->f_string_set, other_struct.f_string_set))
return false;
if (!mojo::Equals(this->f_struct, other_struct.f_struct))
return false;
if (!mojo::Equals(this->f_struct_array, other_struct.f_struct_array))
return false;
if (!mojo::Equals(this->f_struct_map, other_struct.f_struct_map))
return false;
return true;
}
template <typename T, StructWithTraits::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.f_enum < rhs.f_enum)
return true;
if (rhs.f_enum < lhs.f_enum)
return false;
if (lhs.f_bool < rhs.f_bool)
return true;
if (rhs.f_bool < lhs.f_bool)
return false;
if (lhs.f_uint32 < rhs.f_uint32)
return true;
if (rhs.f_uint32 < lhs.f_uint32)
return false;
if (lhs.f_uint64 < rhs.f_uint64)
return true;
if (rhs.f_uint64 < lhs.f_uint64)
return false;
if (lhs.f_string < rhs.f_string)
return true;
if (rhs.f_string < lhs.f_string)
return false;
if (lhs.f_string2 < rhs.f_string2)
return true;
if (rhs.f_string2 < lhs.f_string2)
return false;
if (lhs.f_string_array < rhs.f_string_array)
return true;
if (rhs.f_string_array < lhs.f_string_array)
return false;
if (lhs.f_string_set < rhs.f_string_set)
return true;
if (rhs.f_string_set < lhs.f_string_set)
return false;
if (lhs.f_struct < rhs.f_struct)
return true;
if (rhs.f_struct < lhs.f_struct)
return false;
if (lhs.f_struct_array < rhs.f_struct_array)
return true;
if (rhs.f_struct_array < lhs.f_struct_array)
return false;
if (lhs.f_struct_map < rhs.f_struct_map)
return true;
if (rhs.f_struct_map < lhs.f_struct_map)
return false;
return false;
}
template <typename StructPtrType>
StructWithUnreachableTraitsPtr StructWithUnreachableTraits::Clone() const {
return New(
mojo::Clone(ignore_me)
);
}
template <typename T, StructWithUnreachableTraits::EnableIfSame<T>*>
bool StructWithUnreachableTraits::Equals(const T& other_struct) const {
if (!mojo::Equals(this->ignore_me, other_struct.ignore_me))
return false;
return true;
}
template <typename T, StructWithUnreachableTraits::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.ignore_me < rhs.ignore_me)
return true;
if (rhs.ignore_me < lhs.ignore_me)
return false;
return false;
}
template <typename StructPtrType>
StructWithTraitsContainerPtr StructWithTraitsContainer::Clone() const {
return New(
mojo::Clone(f_struct)
);
}
template <typename T, StructWithTraitsContainer::EnableIfSame<T>*>
bool StructWithTraitsContainer::Equals(const T& other_struct) const {
if (!mojo::Equals(this->f_struct, other_struct.f_struct))
return false;
return true;
}
template <typename T, StructWithTraitsContainer::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.f_struct < rhs.f_struct)
return true;
if (rhs.f_struct < lhs.f_struct)
return false;
return false;
}
template <typename StructPtrType>
TrivialStructWithTraitsPtr TrivialStructWithTraits::Clone() const {
return New(
mojo::Clone(value)
);
}
template <typename T, TrivialStructWithTraits::EnableIfSame<T>*>
bool TrivialStructWithTraits::Equals(const T& other_struct) const {
if (!mojo::Equals(this->value, other_struct.value))
return false;
return true;
}
template <typename T, TrivialStructWithTraits::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.value < rhs.value)
return true;
if (rhs.value < lhs.value)
return false;
return false;
}
template <typename StructPtrType>
MoveOnlyStructWithTraitsPtr MoveOnlyStructWithTraits::Clone() const {
return New(
mojo::Clone(f_handle)
);
}
template <typename T, MoveOnlyStructWithTraits::EnableIfSame<T>*>
bool MoveOnlyStructWithTraits::Equals(const T& other_struct) const {
if (!mojo::Equals(this->f_handle, other_struct.f_handle))
return false;
return true;
}
template <typename T, MoveOnlyStructWithTraits::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.f_handle < rhs.f_handle)
return true;
if (rhs.f_handle < lhs.f_handle)
return false;
return false;
}
template <typename StructPtrType>
MoveOnlyStructWithTraitsContainerPtr MoveOnlyStructWithTraitsContainer::Clone() const {
return New(
mojo::Clone(f_struct)
);
}
template <typename T, MoveOnlyStructWithTraitsContainer::EnableIfSame<T>*>
bool MoveOnlyStructWithTraitsContainer::Equals(const T& other_struct) const {
if (!mojo::Equals(this->f_struct, other_struct.f_struct))
return false;
return true;
}
template <typename T, MoveOnlyStructWithTraitsContainer::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.f_struct < rhs.f_struct)
return true;
if (rhs.f_struct < lhs.f_struct)
return false;
return false;
}
template <typename StructPtrType>
StructWithTraitsForUniquePtrPtr StructWithTraitsForUniquePtr::Clone() const {
return New(
mojo::Clone(f_int32)
);
}
template <typename T, StructWithTraitsForUniquePtr::EnableIfSame<T>*>
bool StructWithTraitsForUniquePtr::Equals(const T& other_struct) const {
if (!mojo::Equals(this->f_int32, other_struct.f_int32))
return false;
return true;
}
template <typename T, StructWithTraitsForUniquePtr::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.f_int32 < rhs.f_int32)
return true;
if (rhs.f_int32 < lhs.f_int32)
return false;
return false;
}
template <typename StructPtrType>
EnumWithTraitsContainerPtr EnumWithTraitsContainer::Clone() const {
return New(
mojo::Clone(f_field)
);
}
template <typename T, EnumWithTraitsContainer::EnableIfSame<T>*>
bool EnumWithTraitsContainer::Equals(const T& other_struct) const {
if (!mojo::Equals(this->f_field, other_struct.f_field))
return false;
return true;
}
template <typename T, EnumWithTraitsContainer::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.f_field < rhs.f_field)
return true;
if (rhs.f_field < lhs.f_field)
return false;
return false;
}
template <typename StructPtrType>
StructForceSerializePtr StructForceSerialize::Clone() const {
return New(
mojo::Clone(value)
);
}
template <typename T, StructForceSerialize::EnableIfSame<T>*>
bool StructForceSerialize::Equals(const T& other_struct) const {
if (!mojo::Equals(this->value, other_struct.value))
return false;
return true;
}
template <typename T, StructForceSerialize::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.value < rhs.value)
return true;
if (rhs.value < lhs.value)
return false;
return false;
}
template <typename StructPtrType>
StructNestedForceSerializePtr StructNestedForceSerialize::Clone() const {
return New(
mojo::Clone(force)
);
}
template <typename T, StructNestedForceSerialize::EnableIfSame<T>*>
bool StructNestedForceSerialize::Equals(const T& other_struct) const {
if (!mojo::Equals(this->force, other_struct.force))
return false;
return true;
}
template <typename T, StructNestedForceSerialize::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.force < rhs.force)
return true;
if (rhs.force < lhs.force)
return false;
return false;
}
} // namespace blink
} // namespace test
} // namespace mojo
namespace mojo {
template <>
struct StructTraits<::mojo::test::blink::NestedStructWithTraits::DataView,
::mojo::test::blink::NestedStructWithTraitsPtr> {
static bool IsNull(const ::mojo::test::blink::NestedStructWithTraitsPtr& input) { return !input; }
static void SetToNull(::mojo::test::blink::NestedStructWithTraitsPtr* output) { output->reset(); }
static decltype(::mojo::test::blink::NestedStructWithTraits::value) value(
const ::mojo::test::blink::NestedStructWithTraitsPtr& input) {
return input->value;
}
static bool Read(::mojo::test::blink::NestedStructWithTraits::DataView input, ::mojo::test::blink::NestedStructWithTraitsPtr* output);
};
template <>
struct StructTraits<::mojo::test::blink::StructWithTraits::DataView,
::mojo::test::blink::StructWithTraitsPtr> {
static bool IsNull(const ::mojo::test::blink::StructWithTraitsPtr& input) { return !input; }
static void SetToNull(::mojo::test::blink::StructWithTraitsPtr* output) { output->reset(); }
static decltype(::mojo::test::blink::StructWithTraits::f_enum) f_enum(
const ::mojo::test::blink::StructWithTraitsPtr& input) {
return input->f_enum;
}
static decltype(::mojo::test::blink::StructWithTraits::f_bool) f_bool(
const ::mojo::test::blink::StructWithTraitsPtr& input) {
return input->f_bool;
}
static decltype(::mojo::test::blink::StructWithTraits::f_uint32) f_uint32(
const ::mojo::test::blink::StructWithTraitsPtr& input) {
return input->f_uint32;
}
static decltype(::mojo::test::blink::StructWithTraits::f_uint64) f_uint64(
const ::mojo::test::blink::StructWithTraitsPtr& input) {
return input->f_uint64;
}
static const decltype(::mojo::test::blink::StructWithTraits::f_string)& f_string(
const ::mojo::test::blink::StructWithTraitsPtr& input) {
return input->f_string;
}
static const decltype(::mojo::test::blink::StructWithTraits::f_string2)& f_string2(
const ::mojo::test::blink::StructWithTraitsPtr& input) {
return input->f_string2;
}
static const decltype(::mojo::test::blink::StructWithTraits::f_string_array)& f_string_array(
const ::mojo::test::blink::StructWithTraitsPtr& input) {
return input->f_string_array;
}
static const decltype(::mojo::test::blink::StructWithTraits::f_string_set)& f_string_set(
const ::mojo::test::blink::StructWithTraitsPtr& input) {
return input->f_string_set;
}
static const decltype(::mojo::test::blink::StructWithTraits::f_struct)& f_struct(
const ::mojo::test::blink::StructWithTraitsPtr& input) {
return input->f_struct;
}
static const decltype(::mojo::test::blink::StructWithTraits::f_struct_array)& f_struct_array(
const ::mojo::test::blink::StructWithTraitsPtr& input) {
return input->f_struct_array;
}
static const decltype(::mojo::test::blink::StructWithTraits::f_struct_map)& f_struct_map(
const ::mojo::test::blink::StructWithTraitsPtr& input) {
return input->f_struct_map;
}
static bool Read(::mojo::test::blink::StructWithTraits::DataView input, ::mojo::test::blink::StructWithTraitsPtr* output);
};
template <>
struct StructTraits<::mojo::test::blink::StructWithUnreachableTraits::DataView,
::mojo::test::blink::StructWithUnreachableTraitsPtr> {
static bool IsNull(const ::mojo::test::blink::StructWithUnreachableTraitsPtr& input) { return !input; }
static void SetToNull(::mojo::test::blink::StructWithUnreachableTraitsPtr* output) { output->reset(); }
static decltype(::mojo::test::blink::StructWithUnreachableTraits::ignore_me) ignore_me(
const ::mojo::test::blink::StructWithUnreachableTraitsPtr& input) {
return input->ignore_me;
}
static bool Read(::mojo::test::blink::StructWithUnreachableTraits::DataView input, ::mojo::test::blink::StructWithUnreachableTraitsPtr* output);
};
template <>
struct StructTraits<::mojo::test::blink::StructWithTraitsContainer::DataView,
::mojo::test::blink::StructWithTraitsContainerPtr> {
static bool IsNull(const ::mojo::test::blink::StructWithTraitsContainerPtr& input) { return !input; }
static void SetToNull(::mojo::test::blink::StructWithTraitsContainerPtr* output) { output->reset(); }
static const decltype(::mojo::test::blink::StructWithTraitsContainer::f_struct)& f_struct(
const ::mojo::test::blink::StructWithTraitsContainerPtr& input) {
return input->f_struct;
}
static bool Read(::mojo::test::blink::StructWithTraitsContainer::DataView input, ::mojo::test::blink::StructWithTraitsContainerPtr* output);
};
template <>
struct StructTraits<::mojo::test::blink::TrivialStructWithTraits::DataView,
::mojo::test::blink::TrivialStructWithTraitsPtr> {
static bool IsNull(const ::mojo::test::blink::TrivialStructWithTraitsPtr& input) { return !input; }
static void SetToNull(::mojo::test::blink::TrivialStructWithTraitsPtr* output) { output->reset(); }
static decltype(::mojo::test::blink::TrivialStructWithTraits::value) value(
const ::mojo::test::blink::TrivialStructWithTraitsPtr& input) {
return input->value;
}
static bool Read(::mojo::test::blink::TrivialStructWithTraits::DataView input, ::mojo::test::blink::TrivialStructWithTraitsPtr* output);
};
template <>
struct StructTraits<::mojo::test::blink::MoveOnlyStructWithTraits::DataView,
::mojo::test::blink::MoveOnlyStructWithTraitsPtr> {
static bool IsNull(const ::mojo::test::blink::MoveOnlyStructWithTraitsPtr& input) { return !input; }
static void SetToNull(::mojo::test::blink::MoveOnlyStructWithTraitsPtr* output) { output->reset(); }
static decltype(::mojo::test::blink::MoveOnlyStructWithTraits::f_handle)& f_handle(
::mojo::test::blink::MoveOnlyStructWithTraitsPtr& input) {
return input->f_handle;
}
static bool Read(::mojo::test::blink::MoveOnlyStructWithTraits::DataView input, ::mojo::test::blink::MoveOnlyStructWithTraitsPtr* output);
};
template <>
struct StructTraits<::mojo::test::blink::MoveOnlyStructWithTraitsContainer::DataView,
::mojo::test::blink::MoveOnlyStructWithTraitsContainerPtr> {
static bool IsNull(const ::mojo::test::blink::MoveOnlyStructWithTraitsContainerPtr& input) { return !input; }
static void SetToNull(::mojo::test::blink::MoveOnlyStructWithTraitsContainerPtr* output) { output->reset(); }
static decltype(::mojo::test::blink::MoveOnlyStructWithTraitsContainer::f_struct)& f_struct(
::mojo::test::blink::MoveOnlyStructWithTraitsContainerPtr& input) {
return input->f_struct;
}
static bool Read(::mojo::test::blink::MoveOnlyStructWithTraitsContainer::DataView input, ::mojo::test::blink::MoveOnlyStructWithTraitsContainerPtr* output);
};
template <>
struct StructTraits<::mojo::test::blink::StructWithTraitsForUniquePtr::DataView,
::mojo::test::blink::StructWithTraitsForUniquePtrPtr> {
static bool IsNull(const ::mojo::test::blink::StructWithTraitsForUniquePtrPtr& input) { return !input; }
static void SetToNull(::mojo::test::blink::StructWithTraitsForUniquePtrPtr* output) { output->reset(); }
static decltype(::mojo::test::blink::StructWithTraitsForUniquePtr::f_int32) f_int32(
const ::mojo::test::blink::StructWithTraitsForUniquePtrPtr& input) {
return input->f_int32;
}
static bool Read(::mojo::test::blink::StructWithTraitsForUniquePtr::DataView input, ::mojo::test::blink::StructWithTraitsForUniquePtrPtr* output);
};
template <>
struct StructTraits<::mojo::test::blink::EnumWithTraitsContainer::DataView,
::mojo::test::blink::EnumWithTraitsContainerPtr> {
static bool IsNull(const ::mojo::test::blink::EnumWithTraitsContainerPtr& input) { return !input; }
static void SetToNull(::mojo::test::blink::EnumWithTraitsContainerPtr* output) { output->reset(); }
static decltype(::mojo::test::blink::EnumWithTraitsContainer::f_field) f_field(
const ::mojo::test::blink::EnumWithTraitsContainerPtr& input) {
return input->f_field;
}
static bool Read(::mojo::test::blink::EnumWithTraitsContainer::DataView input, ::mojo::test::blink::EnumWithTraitsContainerPtr* output);
};
template <>
struct StructTraits<::mojo::test::blink::StructForceSerialize::DataView,
::mojo::test::blink::StructForceSerializePtr> {
static bool IsNull(const ::mojo::test::blink::StructForceSerializePtr& input) { return !input; }
static void SetToNull(::mojo::test::blink::StructForceSerializePtr* output) { output->reset(); }
static decltype(::mojo::test::blink::StructForceSerialize::value) value(
const ::mojo::test::blink::StructForceSerializePtr& input) {
return input->value;
}
static bool Read(::mojo::test::blink::StructForceSerialize::DataView input, ::mojo::test::blink::StructForceSerializePtr* output);
};
template <>
struct StructTraits<::mojo::test::blink::StructNestedForceSerialize::DataView,
::mojo::test::blink::StructNestedForceSerializePtr> {
static bool IsNull(const ::mojo::test::blink::StructNestedForceSerializePtr& input) { return !input; }
static void SetToNull(::mojo::test::blink::StructNestedForceSerializePtr* output) { output->reset(); }
static const decltype(::mojo::test::blink::StructNestedForceSerialize::force)& force(
const ::mojo::test::blink::StructNestedForceSerializePtr& input) {
return input->force;
}
static bool Read(::mojo::test::blink::StructNestedForceSerialize::DataView input, ::mojo::test::blink::StructNestedForceSerializePtr* output);
};
template <>
struct UnionTraits<::mojo::test::blink::UnionWithTraits::DataView,
::mojo::test::blink::UnionWithTraitsPtr> {
static bool IsNull(const ::mojo::test::blink::UnionWithTraitsPtr& input) { return !input; }
static void SetToNull(::mojo::test::blink::UnionWithTraitsPtr* output) { output->reset(); }
static ::mojo::test::blink::UnionWithTraits::Tag GetTag(const ::mojo::test::blink::UnionWithTraitsPtr& input) {
return input->which();
}
static int32_t f_int32(const ::mojo::test::blink::UnionWithTraitsPtr& input) {
return input->get_f_int32();
}
static const ::mojo::test::blink::NestedStructWithTraitsPtr& f_struct(const ::mojo::test::blink::UnionWithTraitsPtr& input) {
return input->get_f_struct();
}
static bool Read(::mojo::test::blink::UnionWithTraits::DataView input, ::mojo::test::blink::UnionWithTraitsPtr* output);
};
} // namespace mojo
#endif // MOJO_PUBLIC_INTERFACES_BINDINGS_TESTS_STRUCT_WITH_TRAITS_MOJOM_BLINK_H_
/* Metadata comment
eyJtZXRhIjogW3siZW5kIjogMzIwNiwgImJlZ2luIjogMzE4OSwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5UcmFpdHNUZXN0U2VydmljZSJ9fSwg
eyJlbmQiOiA1NTA4LCAiYmVnaW4iOiA1NDg4LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh
dGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJv
bWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIs
ICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlRyYWl0c1Rlc3RTZXJ2aWNlLkVjaG9TdHJ1Y3RXaXRo
VHJhaXRzIn19LCB7ImVuZCI6IDU3OTksICJiZWdpbiI6IDU3NzIsICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdl
IjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVHJhaXRzVGVzdFNlcnZpY2UuRWNo
b1RyaXZpYWxTdHJ1Y3RXaXRoVHJhaXRzIn19LCB7ImVuZCI6IDYxMDgsICJiZWdpbiI6IDYwODAs
ICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5l
cyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21p
dW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVHJh
aXRzVGVzdFNlcnZpY2UuRWNob01vdmVPbmx5U3RydWN0V2l0aFRyYWl0cyJ9fSwgeyJlbmQiOiA2
NDQzLCAiYmVnaW4iOiA2NDA3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5
cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29n
bGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1
cmUiOiAibW9qby50ZXN0LlRyYWl0c1Rlc3RTZXJ2aWNlLkVjaG9OdWxsYWJsZU1vdmVPbmx5U3Ry
dWN0V2l0aFRyYWl0cyJ9fSwgeyJlbmQiOiA2NzE5LCAiYmVnaW4iOiA2NzAxLCAiZWRnZSI6ICIl
L2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUi
OiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJs
YW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlRyYWl0c1Rlc3RTZXJ2
aWNlLkVjaG9FbnVtV2l0aFRyYWl0cyJ9fSwgeyJlbmQiOiA3MDIzLCAiYmVnaW4iOiA2OTkxLCAi
ZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMi
LCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVt
L3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlRyYWl0
c1Rlc3RTZXJ2aWNlLkVjaG9TdHJ1Y3RXaXRoVHJhaXRzRm9yVW5pcXVlUHRyIn19LCB7ImVuZCI6
IDczODIsICJiZWdpbiI6IDczNDIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAi
dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdv
b2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25h
dHVyZSI6ICJtb2pvLnRlc3QuVHJhaXRzVGVzdFNlcnZpY2UuRWNob051bGxhYmxlU3RydWN0V2l0
aFRyYWl0c0ZvclVuaXF1ZVB0ciJ9fSwgeyJlbmQiOiA3NjczLCAiYmVnaW4iOiA3NjU0LCAiZWRn
ZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAi
dm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3Ny
YyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlRyYWl0c1Rl
c3RTZXJ2aWNlLkVjaG9VbmlvbldpdGhUcmFpdHMifX0sIHsiZW5kIjogODAyNSwgImJlZ2luIjog
ODAwMywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVz
dC5UZXN0VW5zZXJpYWxpemVkU3RydWN0In19LCB7ImVuZCI6IDk0MjgsICJiZWdpbiI6IDk0MDYs
ICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5l
cyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21p
dW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVGVz
dFVuc2VyaWFsaXplZFN0cnVjdC5QYXNzVW5zZXJpYWxpemVkU3RydWN0In19LCB7ImVuZCI6IDk3
ODMsICJiZWdpbiI6IDk3NjMsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVy
ZSI6ICJtb2pvLnRlc3QuRm9yY2VTZXJpYWxpemVUZXN0ZXIifX0sIHsiZW5kIjogMTEzMjAsICJi
ZWdpbiI6IDExMjk1LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAi
YW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3Vy
Y2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAi
bW9qby50ZXN0LkZvcmNlU2VyaWFsaXplVGVzdGVyLlNlbmRGb3JjZVNlcmlhbGl6ZWRTdHJ1Y3Qi
fX0sIHsiZW5kIjogMTE2MzgsICJiZWdpbiI6IDExNjA3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2Uv
Z2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6
ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJt
b2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LkZvcmNlU2VyaWFsaXplVGVzdGVyLlNlbmRO
ZXN0ZWRGb3JjZVNlcmlhbGl6ZWRTdHJ1Y3QifX0sIHsiZW5kIjogMTIwNzcsICJiZWdpbiI6IDEy
MDU3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0
LlRyYWl0c1Rlc3RTZXJ2aWNlLkVjaG9TdHJ1Y3RXaXRoVHJhaXRzIn19LCB7ImVuZCI6IDEyMjYw
LCAiYmVnaW4iOiAxMjIzMywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBl
IjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xl
c291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJl
IjogIm1vam8udGVzdC5UcmFpdHNUZXN0U2VydmljZS5FY2hvVHJpdmlhbFN0cnVjdFdpdGhUcmFp
dHMifX0sIHsiZW5kIjogMTI0NTksICJiZWdpbiI6IDEyNDMxLCAiZWRnZSI6ICIlL2t5dGhlL2Vk
Z2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1
cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6
ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlRyYWl0c1Rlc3RTZXJ2aWNlLkVjaG9N
b3ZlT25seVN0cnVjdFdpdGhUcmFpdHMifX0sIHsiZW5kIjogMTI2NzYsICJiZWdpbiI6IDEyNjQw
LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9t
aXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlRy
YWl0c1Rlc3RTZXJ2aWNlLkVjaG9OdWxsYWJsZU1vdmVPbmx5U3RydWN0V2l0aFRyYWl0cyJ9fSwg
eyJlbmQiOiAxMjg2NSwgImJlZ2luIjogMTI4NDcsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5l
cmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNo
cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9t
IiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVHJhaXRzVGVzdFNlcnZpY2UuRWNob0VudW1XaXRo
VHJhaXRzIn19LCB7ImVuZCI6IDEzMDUxLCAiYmVnaW4iOiAxMzAxOSwgImVkZ2UiOiAiJS9reXRo
ZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJj
b3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3Vh
Z2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5UcmFpdHNUZXN0U2VydmljZS5F
Y2hvU3RydWN0V2l0aFRyYWl0c0ZvclVuaXF1ZVB0ciJ9fSwgeyJlbmQiOiAxMzI4NCwgImJlZ2lu
IjogMTMyNDQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pv
LnRlc3QuVHJhaXRzVGVzdFNlcnZpY2UuRWNob051bGxhYmxlU3RydWN0V2l0aFRyYWl0c0ZvclVu
aXF1ZVB0ciJ9fSwgeyJlbmQiOiAxMzQ4MywgImJlZ2luIjogMTM0NjQsICJlZGdlIjogIiUva3l0
aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsi
Y29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1
YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVHJhaXRzVGVzdFNlcnZpY2Uu
RWNob1VuaW9uV2l0aFRyYWl0cyJ9fSwgeyJlbmQiOiAxMzk5NSwgImJlZ2luIjogMTM5NzMsICJl
ZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIs
ICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0v
c3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVGVzdFVu
c2VyaWFsaXplZFN0cnVjdC5QYXNzVW5zZXJpYWxpemVkU3RydWN0In19LCB7ImVuZCI6IDE0NTE2
LCAiYmVnaW4iOiAxNDQ5MSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBl
IjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xl
c291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJl
IjogIm1vam8udGVzdC5Gb3JjZVNlcmlhbGl6ZVRlc3Rlci5TZW5kRm9yY2VTZXJpYWxpemVkU3Ry
dWN0In19LCB7ImVuZCI6IDE0NzE5LCAiYmVnaW4iOiAxNDY4OCwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5Gb3JjZVNlcmlhbGl6ZVRlc3Rlci5T
ZW5kTmVzdGVkRm9yY2VTZXJpYWxpemVkU3RydWN0In19LCB7ImVuZCI6IDE5ODQ1LCAiYmVnaW4i
OiAxOTgyMywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8u
dGVzdC5OZXN0ZWRTdHJ1Y3RXaXRoVHJhaXRzIn19LCB7ImVuZCI6IDIzNzE4LCAiYmVnaW4iOiAy
MzcxMywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVz
dC5OZXN0ZWRTdHJ1Y3RXaXRoVHJhaXRzLnZhbHVlIn19LCB7ImVuZCI6IDI0ODE4LCAiYmVnaW4i
OiAyNDc5MSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8u
dGVzdC5TdHJ1Y3RXaXRoVW5yZWFjaGFibGVUcmFpdHMifX0sIHsiZW5kIjogMjg4MjIsICJiZWdp
biI6IDI4ODEzLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5j
aG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2Uu
Y29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9q
by50ZXN0LlN0cnVjdFdpdGhVbnJlYWNoYWJsZVRyYWl0cy5pZ25vcmVfbWUifX0sIHsiZW5kIjog
Mjk5MzQsICJiZWdpbiI6IDI5OTExLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwg
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWdu
YXR1cmUiOiAibW9qby50ZXN0LlRyaXZpYWxTdHJ1Y3RXaXRoVHJhaXRzIn19LCB7ImVuZCI6IDMz
ODMyLCAiYmVnaW4iOiAzMzgyNywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0
eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29v
Z2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0
dXJlIjogIm1vam8udGVzdC5Ucml2aWFsU3RydWN0V2l0aFRyYWl0cy52YWx1ZSJ9fSwgeyJlbmQi
OiAzNDkzOSwgImJlZ2luIjogMzQ5MTEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi
LCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVt
Lmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNp
Z25hdHVyZSI6ICJtb2pvLnRlc3QuU3RydWN0V2l0aFRyYWl0c0ZvclVuaXF1ZVB0ciJ9fSwgeyJl
bmQiOiAzODk2OCwgImJlZ2luIjogMzg5NjEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwg
InNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuU3RydWN0V2l0aFRyYWl0c0ZvclVuaXF1ZVB0ci5mX2lu
dDMyIn19LCB7ImVuZCI6IDQwMDgzLCAiYmVnaW4iOiA0MDA2MCwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5FbnVtV2l0aFRyYWl0c0NvbnRhaW5l
ciJ9fSwgeyJlbmQiOiA0NDAwMSwgImJlZ2luIjogNDM5OTQsICJlZGdlIjogIiUva3l0aGUvZWRn
ZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVz
IjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjog
Im1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuRW51bVdpdGhUcmFpdHNDb250YWluZXIu
Zl9maWVsZCJ9fSwgeyJlbmQiOiA0NTA5MCwgImJlZ2luIjogNDUwNzAsICJlZGdlIjogIiUva3l0
aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsi
Y29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1
YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuU3RydWN0Rm9yY2VTZXJpYWxp
emUifX0sIHsiZW5kIjogNDg5MTMsICJiZWdpbiI6IDQ4OTA4LCAiZWRnZSI6ICIlL2t5dGhlL2Vk
Z2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1
cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6
ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlN0cnVjdEZvcmNlU2VyaWFsaXplLnZh
bHVlIn19LCB7ImVuZCI6IDQ5OTgxLCAiYmVnaW4iOiA0OTk2NiwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5VbmlvbldpdGhUcmFpdHMifX0sIHsi
ZW5kIjogNTIzMjgsICJiZWdpbiI6IDUyMzE4LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh
dGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJv
bWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIs
ICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlVuaW9uV2l0aFRyYWl0cy5mX2ludDMyIn19LCB7ImVu
ZCI6IDUyNDQ5LCAiYmVnaW4iOiA1MjQzOCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRl
cyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21p
dW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAi
c2lnbmF0dXJlIjogIm1vam8udGVzdC5VbmlvbldpdGhUcmFpdHMuZl9pbnQzMiJ9fSwgeyJlbmQi
OiA1MjU5OSwgImJlZ2luIjogNTI1ODgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi
LCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVt
Lmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNp
Z25hdHVyZSI6ICJtb2pvLnRlc3QuVW5pb25XaXRoVHJhaXRzLmZfaW50MzIifX0sIHsiZW5kIjog
NTI3MDEsICJiZWdpbiI6IDUyNjkwLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwg
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWdu
YXR1cmUiOiAibW9qby50ZXN0LlVuaW9uV2l0aFRyYWl0cy5mX3N0cnVjdCJ9fSwgeyJlbmQiOiA1
Mjg0NCwgImJlZ2luIjogNTI4MzIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAi
dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdv
b2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25h
dHVyZSI6ICJtb2pvLnRlc3QuVW5pb25XaXRoVHJhaXRzLmZfc3RydWN0In19LCB7ImVuZCI6IDUz
MDAxLCAiYmVnaW4iOiA1Mjk4OSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0
eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29v
Z2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0
dXJlIjogIm1vam8udGVzdC5VbmlvbldpdGhUcmFpdHMuZl9zdHJ1Y3QifX0sIHsiZW5kIjogNTM5
MzQsICJiZWdpbiI6IDUzOTE4LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5
cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29n
bGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1
cmUiOiAibW9qby50ZXN0LlN0cnVjdFdpdGhUcmFpdHMifX0sIHsiZW5kIjogNTgxNTQsICJiZWdp
biI6IDU4MTQ4LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5j
aG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2Uu
Y29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9q
by50ZXN0LlN0cnVjdFdpdGhUcmFpdHMuZl9lbnVtIn19LCB7ImVuZCI6IDU4MjI2LCAiYmVnaW4i
OiA1ODIyMCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8u
dGVzdC5TdHJ1Y3RXaXRoVHJhaXRzLmZfYm9vbCJ9fSwgeyJlbmQiOiA1ODMwNiwgImJlZ2luIjog
NTgyOTgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRl
c3QuU3RydWN0V2l0aFRyYWl0cy5mX3VpbnQzMiJ9fSwgeyJlbmQiOiA1ODM4NiwgImJlZ2luIjog
NTgzNzgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRl
c3QuU3RydWN0V2l0aFRyYWl0cy5mX3VpbnQ2NCJ9fSwgeyJlbmQiOiA1ODQ2OSwgImJlZ2luIjog
NTg0NjEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRl
c3QuU3RydWN0V2l0aFRyYWl0cy5mX3N0cmluZyJ9fSwgeyJlbmQiOiA1ODU1NCwgImJlZ2luIjog
NTg1NDUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRl
c3QuU3RydWN0V2l0aFRyYWl0cy5mX3N0cmluZzIifX0sIHsiZW5kIjogNTg2NjIsICJiZWdpbiI6
IDU4NjQ4LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50
ZXN0LlN0cnVjdFdpdGhUcmFpdHMuZl9zdHJpbmdfYXJyYXkifX0sIHsiZW5kIjogNTg3NjYsICJi
ZWdpbiI6IDU4NzU0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAi
YW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3Vy
Y2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAi
bW9qby50ZXN0LlN0cnVjdFdpdGhUcmFpdHMuZl9zdHJpbmdfc2V0In19LCB7ImVuZCI6IDU4ODYz
LCAiYmVnaW4iOiA1ODg1NSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBl
IjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xl
c291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJl
IjogIm1vam8udGVzdC5TdHJ1Y3RXaXRoVHJhaXRzLmZfc3RydWN0In19LCB7ImVuZCI6IDU4OTg1
LCAiYmVnaW4iOiA1ODk3MSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBl
IjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xl
c291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJl
IjogIm1vam8udGVzdC5TdHJ1Y3RXaXRoVHJhaXRzLmZfc3RydWN0X2FycmF5In19LCB7ImVuZCI6
IDU5MTE3LCAiYmVnaW4iOiA1OTEwNSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs
ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln
bmF0dXJlIjogIm1vam8udGVzdC5TdHJ1Y3RXaXRoVHJhaXRzLmZfc3RydWN0X21hcCJ9fSwgeyJl
bmQiOiA2MDE4OSwgImJlZ2luIjogNjAxNjQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwg
InNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuU3RydWN0V2l0aFRyYWl0c0NvbnRhaW5lciJ9fSwgeyJl
bmQiOiA2NDI4NywgImJlZ2luIjogNjQyNzksICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwg
InNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuU3RydWN0V2l0aFRyYWl0c0NvbnRhaW5lci5mX3N0cnVj
dCJ9fSwgeyJlbmQiOiA2NTM5MywgImJlZ2luIjogNjUzNjksICJlZGdlIjogIiUva3l0aGUvZWRn
ZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVz
IjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjog
Im1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuTW92ZU9ubHlTdHJ1Y3RXaXRoVHJhaXRz
In19LCB7ImVuZCI6IDY5MjU0LCAiYmVnaW4iOiA2OTI0NiwgImVkZ2UiOiAiJS9reXRoZS9lZGdl
L2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMi
OiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAi
bW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5Nb3ZlT25seVN0cnVjdFdpdGhUcmFpdHMu
Zl9oYW5kbGUifX0sIHsiZW5kIjogNzAzNzMsICJiZWdpbiI6IDcwMzQwLCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5n
dWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0Lk1vdmVPbmx5U3RydWN0V2l0
aFRyYWl0c0NvbnRhaW5lciJ9fSwgeyJlbmQiOiA3NDUwMCwgImJlZ2luIjogNzQ0OTIsICJlZGdl
IjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2
bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3Jj
IiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuTW92ZU9ubHlT
dHJ1Y3RXaXRoVHJhaXRzQ29udGFpbmVyLmZfc3RydWN0In19LCB7ImVuZCI6IDc1NjQ0LCAiYmVn
aW4iOiA3NTYxOCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFu
Y2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNl
LmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1v
am8udGVzdC5TdHJ1Y3ROZXN0ZWRGb3JjZVNlcmlhbGl6ZSJ9fSwgeyJlbmQiOiA3OTgwNCwgImJl
Z2luIjogNzk3OTksICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJj
ZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJt
b2pvLnRlc3QuU3RydWN0TmVzdGVkRm9yY2VTZXJpYWxpemUuZm9yY2UifX1dLCAidHlwZSI6ICJr
eXRoZTAifQ==
*/