blob: 3b473eea4cd782fa82be5f0f77fd1001dda9bfb6 [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
// 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 <optional>
#include <type_traits>
#include <utility>
#include "base/types/cxx23_to_underlying.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-features.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/lib/message_size_estimator.h"
#include "mojo/public/cpp/bindings/raw_ptr_impl_ref_traits.h"
#ifdef KYTHE_IS_RUNNING
#pragma kythe_inline_metadata "Metadata comment"
#endif
namespace mojo::test::blink {
class TraitsTestServiceProxy;
template <typename ImplRefTraits>
class TraitsTestServiceStub;
class TraitsTestServiceRequestValidator;
class TraitsTestServiceResponseValidator;
// @generated_from: mojo.test.TraitsTestService
class TraitsTestService
: public TraitsTestServiceInterfaceBase {
public:
using IPCStableHashFunction = uint32_t(*)();
static const char Name_[];
static IPCStableHashFunction 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 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 uint32_t IPCStableHash();
};
struct EchoTrivialStructWithTraits_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct EchoMoveOnlyStructWithTraits_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct EchoNullableMoveOnlyStructWithTraits_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct EchoEnumWithTraits_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct EchoStructWithTraitsForUniquePtr_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct EchoNullableStructWithTraitsForUniquePtr_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct EchoUnionWithTraits_Sym {
NOINLINE static uint32_t IPCStableHash();
};
#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:
using IPCStableHashFunction = uint32_t(*)();
static const char Name_[];
static IPCStableHashFunction 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 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 uint32_t IPCStableHash();
};
#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:
using IPCStableHashFunction = uint32_t(*)();
static const char Name_[];
static IPCStableHashFunction 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 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 uint32_t IPCStableHash();
};
struct SendNestedForceSerializedStruct_Sym {
NOINLINE static uint32_t IPCStableHash();
};
#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(
std::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); }
template <typename T, NestedStructWithTraits::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(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(
std::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); }
template <typename T, StructWithUnreachableTraits::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(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(
std::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); }
template <typename T, TrivialStructWithTraits::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(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(
std::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); }
template <typename T, StructWithTraitsForUniquePtr::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(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(
std::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); }
template <typename T, EnumWithTraitsContainer::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(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(
std::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); }
template <typename T, StructForceSerialize::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(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.");
return nullptr;
}
// Construct an instance holding |f_int32|.
static UnionWithTraitsPtr
NewFInt32(
int32_t value) {
auto result = UnionWithTraitsPtr(std::in_place);
result->set_f_int32(std::move(value));
return result;
}
// Construct an instance holding |f_struct|.
static UnionWithTraitsPtr
NewFStruct(
NestedStructWithTraitsPtr value) {
auto result = UnionWithTraitsPtr(std::in_place);
result->set_f_struct(std::move(value));
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();
// Delete the copy constructor and copy assignment operators because `data_`
// contains raw pointers that must not be copied.
UnionWithTraits(const UnionWithTraits& other) = delete;
UnionWithTraits& operator=(const UnionWithTraits& other) = delete;
// 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(
std::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 T, StructWithTraits::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(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(
std::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 T, StructWithTraitsContainer::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(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(
std::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 T, MoveOnlyStructWithTraits::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(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(
std::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 T, MoveOnlyStructWithTraitsContainer::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(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(
std::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); }
template <typename T, StructNestedForceSerialize::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(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;
}
} // mojo::test::blink
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
eyJ0eXBlIjogImt5dGhlMCIsICJtZXRhIjogW3sidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJi
ZWdpbiI6IDIwNDEsICJlbmQiOiAyMDU4LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwg
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0v
c3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVHJhaXRzVGVzdFNlcnZpY2UifSwg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAiYmVnaW4iOiA0MzkyLCAiZW5kIjogNDQxMiwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJt
b2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2No
cm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlRyYWl0c1Rlc3RTZXJ2
aWNlLkVjaG9TdHJ1Y3RXaXRoVHJhaXRzIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogNDY3NiwgImVuZCI6IDQ3
MDMsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdv
b2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJl
IjogIm1vam8udGVzdC5UcmFpdHNUZXN0U2VydmljZS5FY2hvVHJpdmlhbFN0cnVjdFdpdGhUcmFp
dHMifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAiYmVnaW4iOiA0OTg0LCAiZW5kIjogNTAxMiwgInZuYW1lIjogeyJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2Vh
cmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlRyYWl0c1Rl
c3RTZXJ2aWNlLkVjaG9Nb3ZlT25seVN0cnVjdFdpdGhUcmFpdHMifSwgImVkZ2UiOiAiJS9reXRo
ZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiA1
MzExLCAiZW5kIjogNTM0NywgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMi
OiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFp
biIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlRyYWl0c1Rlc3RTZXJ2aWNlLkVjaG9OdWxsYWJs
ZU1vdmVPbmx5U3RydWN0V2l0aFRyYWl0cyJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh
dGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDU2MDUsICJlbmQiOiA1
NjIzLCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVy
ZSI6ICJtb2pvLnRlc3QuVHJhaXRzVGVzdFNlcnZpY2UuRWNob0VudW1XaXRoVHJhaXRzIn0sICJl
ZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVz
IiwgImJlZ2luIjogNTg5NSwgImVuZCI6IDU5MjcsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9q
b20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJv
bWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5UcmFpdHNUZXN0U2Vydmlj
ZS5FY2hvU3RydWN0V2l0aFRyYWl0c0ZvclVuaXF1ZVB0ciJ9LCAiZWRnZSI6ICIlL2t5dGhlL2Vk
Z2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDYyNDYs
ICJlbmQiOiA2Mjg2LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJj
aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwg
InNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVHJhaXRzVGVzdFNlcnZpY2UuRWNob051bGxhYmxlU3Ry
dWN0V2l0aFRyYWl0c0ZvclVuaXF1ZVB0ciJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh
dGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDY1NTgsICJlbmQiOiA2
NTc3LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVy
ZSI6ICJtb2pvLnRlc3QuVHJhaXRzVGVzdFNlcnZpY2UuRWNob1VuaW9uV2l0aFRyYWl0cyJ9LCAi
ZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5l
cyIsICJiZWdpbiI6IDY5MDYsICJlbmQiOiA2OTI4LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1v
am9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hy
b21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVGVzdFVuc2VyaWFsaXpl
ZFN0cnVjdCJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDgzMDUsICJlbmQiOiA4MzI3LCAidm5hbWUiOiB7Imxh
bmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nv
ZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVGVz
dFVuc2VyaWFsaXplZFN0cnVjdC5QYXNzVW5zZXJpYWxpemVkU3RydWN0In0sICJlZGdlIjogIiUv
a3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2lu
IjogODY2MSwgImVuZCI6IDg2ODEsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMv
L21haW4iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5Gb3JjZVNlcmlhbGl6ZVRlc3RlciJ9LCAi
ZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5l
cyIsICJiZWdpbiI6IDEwMTk3LCAiZW5kIjogMTAyMjIsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAi
bW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9j
aHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5Gb3JjZVNlcmlhbGl6
ZVRlc3Rlci5TZW5kRm9yY2VTZXJpYWxpemVkU3RydWN0In0sICJlZGdlIjogIiUva3l0aGUvZWRn
ZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogMTA1MDks
ICJlbmQiOiAxMDU0MCwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAi
Y2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIs
ICJzaWduYXR1cmUiOiAibW9qby50ZXN0LkZvcmNlU2VyaWFsaXplVGVzdGVyLlNlbmROZXN0ZWRG
b3JjZVNlcmlhbGl6ZWRTdHJ1Y3QifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9
LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAxMDk1OSwgImVuZCI6IDEwOTc5
LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29n
bGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6
ICJtb2pvLnRlc3QuVHJhaXRzVGVzdFNlcnZpY2UuRWNob1N0cnVjdFdpdGhUcmFpdHMifSwgImVk
Z2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMi
LCAiYmVnaW4iOiAxMTEzNSwgImVuZCI6IDExMTYyLCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1v
am9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hy
b21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVHJhaXRzVGVzdFNlcnZp
Y2UuRWNob1RyaXZpYWxTdHJ1Y3RXaXRoVHJhaXRzIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogMTEzMzMsICJl
bmQiOiAxMTM2MSwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hy
b21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJz
aWduYXR1cmUiOiAibW9qby50ZXN0LlRyYWl0c1Rlc3RTZXJ2aWNlLkVjaG9Nb3ZlT25seVN0cnVj
dFdpdGhUcmFpdHMifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUi
OiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAxMTU0MiwgImVuZCI6IDExNTc4LCAidm5hbWUi
OiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2Uu
Y29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRl
c3QuVHJhaXRzVGVzdFNlcnZpY2UuRWNob051bGxhYmxlTW92ZU9ubHlTdHJ1Y3RXaXRoVHJhaXRz
In0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgImJlZ2luIjogMTE3NDksICJlbmQiOiAxMTc2NywgInZuYW1lIjogeyJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2Vh
cmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlRyYWl0c1Rl
c3RTZXJ2aWNlLkVjaG9FbnVtV2l0aFRyYWl0cyJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2Vu
ZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDExOTIxLCAiZW5k
IjogMTE5NTMsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2ln
bmF0dXJlIjogIm1vam8udGVzdC5UcmFpdHNUZXN0U2VydmljZS5FY2hvU3RydWN0V2l0aFRyYWl0
c0ZvclVuaXF1ZVB0ciJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDEyMTQ2LCAiZW5kIjogMTIxODYsICJ2bmFt
ZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJj
ZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1vam8u
dGVzdC5UcmFpdHNUZXN0U2VydmljZS5FY2hvTnVsbGFibGVTdHJ1Y3RXaXRoVHJhaXRzRm9yVW5p
cXVlUHRyIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFu
Y2hvcl9kZWZpbmVzIiwgImJlZ2luIjogMTIzNjYsICJlbmQiOiAxMjM4NSwgInZuYW1lIjogeyJs
YW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
b2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlRy
YWl0c1Rlc3RTZXJ2aWNlLkVjaG9VbmlvbldpdGhUcmFpdHMifSwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAxMjg3
NSwgImVuZCI6IDEyODk3LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6
ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWlu
IiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVGVzdFVuc2VyaWFsaXplZFN0cnVjdC5QYXNzVW5z
ZXJpYWxpemVkU3RydWN0In0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0
eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogMTMzOTMsICJlbmQiOiAxMzQxOCwgInZu
YW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibW9q
by50ZXN0LkZvcmNlU2VyaWFsaXplVGVzdGVyLlNlbmRGb3JjZVNlcmlhbGl6ZWRTdHJ1Y3QifSwg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAiYmVnaW4iOiAxMzU5MCwgImVuZCI6IDEzNjIxLCAidm5hbWUiOiB7Imxhbmd1YWdlIjog
Im1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gv
Y2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuRm9yY2VTZXJpYWxp
emVUZXN0ZXIuU2VuZE5lc3RlZEZvcmNlU2VyaWFsaXplZFN0cnVjdCJ9LCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6
IDE4NzI1LCAiZW5kIjogMTg3NDcsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMv
L21haW4iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5OZXN0ZWRTdHJ1Y3RXaXRoVHJhaXRzIn0s
ICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZp
bmVzIiwgImJlZ2luIjogMjI3NTgsICJlbmQiOiAyMjc2MywgInZuYW1lIjogeyJsYW5ndWFnZSI6
ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNo
L2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0Lk5lc3RlZFN0cnVj
dFdpdGhUcmFpdHMudmFsdWUifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAyMzgzNiwgImVuZCI6IDIzODYzLCAi
dm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVz
b3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJt
b2pvLnRlc3QuU3RydWN0V2l0aFVucmVhY2hhYmxlVHJhaXRzIn0sICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogMjgw
MDYsICJlbmQiOiAyODAxNSwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMi
OiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFp
biIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlN0cnVjdFdpdGhVbnJlYWNoYWJsZVRyYWl0cy5p
Z25vcmVfbWUifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAi
YW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAyOTEwNCwgImVuZCI6IDI5MTI3LCAidm5hbWUiOiB7
Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3Qu
VHJpdmlhbFN0cnVjdFdpdGhUcmFpdHMifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRl
cyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAzMzE2NCwgImVuZCI6IDMz
MTY5LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVy
ZSI6ICJtb2pvLnRlc3QuVHJpdmlhbFN0cnVjdFdpdGhUcmFpdHMudmFsdWUifSwgImVkZ2UiOiAi
JS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVn
aW4iOiAzNDI0OCwgImVuZCI6IDM0Mjc2LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwg
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0v
c3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuU3RydWN0V2l0aFRyYWl0c0ZvclVu
aXF1ZVB0ciJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDM4NDQ3LCAiZW5kIjogMzg0NTQsICJ2bmFtZSI6IHsi
bGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5T
dHJ1Y3RXaXRoVHJhaXRzRm9yVW5pcXVlUHRyLmZfaW50MzIifSwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAzOTU0
NiwgImVuZCI6IDM5NTY5LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6
ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWlu
IiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuRW51bVdpdGhUcmFpdHNDb250YWluZXIifSwgImVk
Z2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMi
LCAiYmVnaW4iOiA0MzYyNCwgImVuZCI6IDQzNjMxLCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1v
am9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hy
b21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuRW51bVdpdGhUcmFpdHND
b250YWluZXIuZl9maWVsZCJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsi
dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDQ0NzAwLCAiZW5kIjogNDQ3MjAsICJ2
bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1v
am8udGVzdC5TdHJ1Y3RGb3JjZVNlcmlhbGl6ZSJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2Vu
ZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDQ4Njc5LCAiZW5k
IjogNDg2ODQsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2ln
bmF0dXJlIjogIm1vam8udGVzdC5TdHJ1Y3RGb3JjZVNlcmlhbGl6ZS52YWx1ZSJ9LCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJi
ZWdpbiI6IDQ5NzM3LCAiZW5kIjogNDk3NTIsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20i
LCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1
bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5VbmlvbldpdGhUcmFpdHMifSwg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAiYmVnaW4iOiA1MjM1NSwgImVuZCI6IDUyMzY1LCAidm5hbWUiOiB7Imxhbmd1YWdlIjog
Im1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gv
Y2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVW5pb25XaXRoVHJh
aXRzLmZfaW50MzIifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUi
OiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiA1MjQ3NSwgImVuZCI6IDUyNDg2LCAidm5hbWUi
OiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2Uu
Y29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRl
c3QuVW5pb25XaXRoVHJhaXRzLmZfaW50MzIifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVy
YXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiA1MjYyNSwgImVuZCI6
IDUyNjM2LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1
bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25h
dHVyZSI6ICJtb2pvLnRlc3QuVW5pb25XaXRoVHJhaXRzLmZfaW50MzIifSwgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4i
OiA1MjcyNywgImVuZCI6IDUyNzM4LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNv
cnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3Jj
Ly9tYWluIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVW5pb25XaXRoVHJhaXRzLmZfc3RydWN0
In0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgImJlZ2luIjogNTI4NjksICJlbmQiOiA1Mjg4MSwgInZuYW1lIjogeyJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2Vh
cmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlVuaW9uV2l0
aFRyYWl0cy5mX3N0cnVjdCJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsi
dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDUzMDI2LCAiZW5kIjogNTMwMzgsICJ2
bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1v
am8udGVzdC5VbmlvbldpdGhUcmFpdHMuZl9zdHJ1Y3QifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdl
L2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiA1Mzk1NSwg
ImVuZCI6IDUzOTcxLCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJj
aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwg
InNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuU3RydWN0V2l0aFRyYWl0cyJ9LCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6
IDU4MzIyLCAiZW5kIjogNTgzMjgsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMv
L21haW4iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5TdHJ1Y3RXaXRoVHJhaXRzLmZfZW51bSJ9
LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVm
aW5lcyIsICJiZWdpbiI6IDU4Mzk0LCAiZW5kIjogNTg0MDAsICJ2bmFtZSI6IHsibGFuZ3VhZ2Ui
OiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJj
aC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5TdHJ1Y3RXaXRo
VHJhaXRzLmZfYm9vbCJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDU4NDcyLCAiZW5kIjogNTg0ODAsICJ2bmFt
ZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJj
ZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1vam8u
dGVzdC5TdHJ1Y3RXaXRoVHJhaXRzLmZfdWludDMyIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogNTg1NTIsICJl
bmQiOiA1ODU2MCwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hy
b21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJz
aWduYXR1cmUiOiAibW9qby50ZXN0LlN0cnVjdFdpdGhUcmFpdHMuZl91aW50NjQifSwgImVkZ2Ui
OiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAi
YmVnaW4iOiA1ODYzNSwgImVuZCI6IDU4NjQzLCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9t
IiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21p
dW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuU3RydWN0V2l0aFRyYWl0cy5m
X3N0cmluZyJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDU4NzE5LCAiZW5kIjogNTg3MjgsICJ2bmFtZSI6IHsi
bGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5T
dHJ1Y3RXaXRoVHJhaXRzLmZfc3RyaW5nMiJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh
dGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDU4ODIyLCAiZW5kIjog
NTg4MzYsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVt
Lmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0
dXJlIjogIm1vam8udGVzdC5TdHJ1Y3RXaXRoVHJhaXRzLmZfc3RyaW5nX2FycmF5In0sICJlZGdl
IjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwg
ImJlZ2luIjogNTg5MjgsICJlbmQiOiA1ODk0MCwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pv
bSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9t
aXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlN0cnVjdFdpdGhUcmFpdHMu
Zl9zdHJpbmdfc2V0In0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBl
IjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogNTkwMjksICJlbmQiOiA1OTAzNywgInZuYW1l
IjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNl
LmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibW9qby50
ZXN0LlN0cnVjdFdpdGhUcmFpdHMuZl9zdHJ1Y3QifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dl
bmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiA1OTE0NSwgImVu
ZCI6IDU5MTU5LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJv
bWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNp
Z25hdHVyZSI6ICJtb2pvLnRlc3QuU3RydWN0V2l0aFRyYWl0cy5mX3N0cnVjdF9hcnJheSJ9LCAi
ZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5l
cyIsICJiZWdpbiI6IDU5Mjc5LCAiZW5kIjogNTkyOTEsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAi
bW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9j
aHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5TdHJ1Y3RXaXRoVHJh
aXRzLmZfc3RydWN0X21hcCJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsi
dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDYwMzM4LCAiZW5kIjogNjAzNjMsICJ2
bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1v
am8udGVzdC5TdHJ1Y3RXaXRoVHJhaXRzQ29udGFpbmVyIn0sICJlZGdlIjogIiUva3l0aGUvZWRn
ZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogNjQ1OTks
ICJlbmQiOiA2NDYwNywgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAi
Y2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIs
ICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlN0cnVjdFdpdGhUcmFpdHNDb250YWluZXIuZl9zdHJ1
Y3QifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAiYmVnaW4iOiA2NTY4OSwgImVuZCI6IDY1NzEzLCAidm5hbWUiOiB7Imxhbmd1
YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVz
ZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuTW92ZU9u
bHlTdHJ1Y3RXaXRoVHJhaXRzIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwg
eyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogNjk3MTEsICJlbmQiOiA2OTcxOSwg
InZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xl
c291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAi
bW9qby50ZXN0Lk1vdmVPbmx5U3RydWN0V2l0aFRyYWl0cy5mX2hhbmRsZSJ9LCAiZWRnZSI6ICIl
L2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdp
biI6IDcwODA1LCAiZW5kIjogNzA4MzgsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAi
Y29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9z
cmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5Nb3ZlT25seVN0cnVjdFdpdGhUcmFp
dHNDb250YWluZXIifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUi
OiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiA3NTExMSwgImVuZCI6IDc1MTE5LCAidm5hbWUi
OiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2Uu
Y29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRl
c3QuTW92ZU9ubHlTdHJ1Y3RXaXRoVHJhaXRzQ29udGFpbmVyLmZfc3RydWN0In0sICJlZGdlIjog
IiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJl
Z2luIjogNzYyMzcsICJlbmQiOiA3NjI2MywgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIs
ICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVt
L3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlN0cnVjdE5lc3RlZEZvcmNlU2Vy
aWFsaXplIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFu
Y2hvcl9kZWZpbmVzIiwgImJlZ2luIjogODA1NjUsICJlbmQiOiA4MDU3MCwgInZuYW1lIjogeyJs
YW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
b2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlN0
cnVjdE5lc3RlZEZvcmNlU2VyaWFsaXplLmZvcmNlIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMifV19
*/