| // mojo/public/interfaces/bindings/tests/validation_test_interfaces.mojom.h is auto generated by mojom_bindings_generator.py, do not edit |
| |
| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef MOJO_PUBLIC_INTERFACES_BINDINGS_TESTS_VALIDATION_TEST_INTERFACES_MOJOM_H_ |
| #define MOJO_PUBLIC_INTERFACES_BINDINGS_TESTS_VALIDATION_TEST_INTERFACES_MOJOM_H_ |
| |
| #include <stdint.h> |
| |
| #include <limits> |
| #include <type_traits> |
| #include <utility> |
| |
| #include "third_party/abseil-cpp/absl/types/optional.h" |
| #include "mojo/public/cpp/bindings/clone_traits.h" |
| #include "mojo/public/cpp/bindings/equals_traits.h" |
| #include "mojo/public/cpp/bindings/lib/serialization.h" |
| #include "mojo/public/cpp/bindings/struct_ptr.h" |
| #include "mojo/public/cpp/bindings/struct_traits.h" |
| #include "mojo/public/cpp/bindings/union_traits.h" |
| |
| #include "third_party/perfetto/include/perfetto/tracing/traced_value_forward.h" |
| |
| #include "mojo/public/interfaces/bindings/tests/validation_test_interfaces.mojom-shared.h" |
| #include "mojo/public/interfaces/bindings/tests/validation_test_interfaces.mojom-forward.h" |
| #include <string> |
| #include <vector> |
| |
| #include "mojo/public/cpp/bindings/lib/control_message_handler.h" |
| #include "mojo/public/cpp/bindings/raw_ptr_impl_ref_traits.h" |
| |
| |
| |
| #ifdef KYTHE_IS_RUNNING |
| #pragma kythe_inline_metadata "Metadata comment" |
| #endif |
| |
| |
| namespace mojo { |
| namespace test { |
| |
| class InterfaceAProxy; |
| |
| template <typename ImplRefTraits> |
| class InterfaceAStub; |
| |
| class InterfaceARequestValidator; |
| |
| |
| // @generated_from: mojo.test.InterfaceA |
| class InterfaceA |
| : public InterfaceAInterfaceBase { |
| public: |
| static const char Name_[]; |
| static std::pair<uint32_t, const void*> MessageToMethodInfo_(mojo::Message& message); |
| static const char* MessageToMethodName_(mojo::Message& message); |
| static constexpr uint32_t Version_ = 0; |
| static constexpr bool PassesAssociatedKinds_ = false; |
| static constexpr bool HasSyncMethods_ = false; |
| static constexpr bool HasUninterruptableMethods_ = false; |
| |
| using Base_ = InterfaceAInterfaceBase; |
| using Proxy_ = InterfaceAProxy; |
| |
| template <typename ImplRefTraits> |
| using Stub_ = InterfaceAStub<ImplRefTraits>; |
| |
| using RequestValidator_ = InterfaceARequestValidator; |
| using ResponseValidator_ = mojo::PassThroughFilter; |
| enum MethodMinVersions : uint32_t { |
| }; |
| |
| // 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) |
| #endif // !BUILDFLAG(IS_FUCHSIA) |
| virtual ~InterfaceA() = default; |
| }; |
| |
| class BoundsCheckTestInterfaceProxy; |
| |
| template <typename ImplRefTraits> |
| class BoundsCheckTestInterfaceStub; |
| |
| class BoundsCheckTestInterfaceRequestValidator; |
| class BoundsCheckTestInterfaceResponseValidator; |
| |
| |
| // @generated_from: mojo.test.BoundsCheckTestInterface |
| class BoundsCheckTestInterface |
| : public BoundsCheckTestInterfaceInterfaceBase { |
| public: |
| static const char Name_[]; |
| static std::pair<uint32_t, const void*> MessageToMethodInfo_(mojo::Message& message); |
| static const char* MessageToMethodName_(mojo::Message& message); |
| static constexpr uint32_t Version_ = 0; |
| static constexpr bool PassesAssociatedKinds_ = false; |
| static constexpr bool HasSyncMethods_ = false; |
| static constexpr bool HasUninterruptableMethods_ = false; |
| |
| using Base_ = BoundsCheckTestInterfaceInterfaceBase; |
| using Proxy_ = BoundsCheckTestInterfaceProxy; |
| |
| template <typename ImplRefTraits> |
| using Stub_ = BoundsCheckTestInterfaceStub<ImplRefTraits>; |
| |
| using RequestValidator_ = BoundsCheckTestInterfaceRequestValidator; |
| using ResponseValidator_ = BoundsCheckTestInterfaceResponseValidator; |
| enum MethodMinVersions : uint32_t { |
| kMethod0MinVersion = 0, |
| kMethod1MinVersion = 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 Method0_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| struct Method1_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| #endif // !BUILDFLAG(IS_FUCHSIA) |
| virtual ~BoundsCheckTestInterface() = default; |
| |
| |
| using Method0Callback = base::OnceCallback<void(uint8_t)>; |
| |
| // @generated_from: mojo.test.BoundsCheckTestInterface.Method0 |
| virtual void Method0(uint8_t param0, Method0Callback callback) = 0; |
| |
| |
| // @generated_from: mojo.test.BoundsCheckTestInterface.Method1 |
| virtual void Method1(uint8_t param0) = 0; |
| }; |
| |
| class ConformanceTestInterfaceProxy; |
| |
| template <typename ImplRefTraits> |
| class ConformanceTestInterfaceStub; |
| |
| class ConformanceTestInterfaceRequestValidator; |
| class ConformanceTestInterfaceResponseValidator; |
| |
| |
| // @generated_from: mojo.test.ConformanceTestInterface |
| class ConformanceTestInterface |
| : public ConformanceTestInterfaceInterfaceBase { |
| public: |
| static const char Name_[]; |
| static std::pair<uint32_t, const void*> MessageToMethodInfo_(mojo::Message& message); |
| static const char* MessageToMethodName_(mojo::Message& message); |
| static constexpr uint32_t Version_ = 0; |
| static constexpr bool PassesAssociatedKinds_ = false; |
| static constexpr bool HasSyncMethods_ = false; |
| static constexpr bool HasUninterruptableMethods_ = false; |
| |
| using Base_ = ConformanceTestInterfaceInterfaceBase; |
| using Proxy_ = ConformanceTestInterfaceProxy; |
| |
| template <typename ImplRefTraits> |
| using Stub_ = ConformanceTestInterfaceStub<ImplRefTraits>; |
| |
| using RequestValidator_ = ConformanceTestInterfaceRequestValidator; |
| using ResponseValidator_ = ConformanceTestInterfaceResponseValidator; |
| enum MethodMinVersions : uint32_t { |
| kMethod0MinVersion = 0, |
| kMethod1MinVersion = 0, |
| kMethod2MinVersion = 0, |
| kMethod3MinVersion = 0, |
| kMethod4MinVersion = 0, |
| kMethod5MinVersion = 0, |
| kMethod6MinVersion = 0, |
| kMethod7MinVersion = 0, |
| kMethod8MinVersion = 0, |
| kMethod9MinVersion = 0, |
| kMethod10MinVersion = 0, |
| kMethod11MinVersion = 0, |
| kMethod12MinVersion = 0, |
| kMethod13MinVersion = 0, |
| kMethod14MinVersion = 0, |
| kMethod15MinVersion = 0, |
| kMethod16MinVersion = 0, |
| kMethod17MinVersion = 0, |
| kMethod18MinVersion = 0, |
| kMethod19MinVersion = 0, |
| kMethod20MinVersion = 0, |
| kMethod21MinVersion = 0, |
| kMethod22MinVersion = 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 Method0_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| struct Method1_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| struct Method2_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| struct Method3_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| struct Method4_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| struct Method5_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| struct Method6_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| struct Method7_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| struct Method8_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| struct Method9_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| struct Method10_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| struct Method11_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| struct Method12_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| struct Method13_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| struct Method14_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| struct Method15_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| struct Method16_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| struct Method17_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| struct Method18_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| struct Method19_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| struct Method20_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| struct Method21_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| struct Method22_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| #endif // !BUILDFLAG(IS_FUCHSIA) |
| virtual ~ConformanceTestInterface() = default; |
| |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method0 |
| virtual void Method0(float param0) = 0; |
| |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method1 |
| virtual void Method1(StructAPtr param0) = 0; |
| |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method2 |
| virtual void Method2(StructBPtr param0, StructAPtr param1) = 0; |
| |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method3 |
| virtual void Method3(const std::vector<bool>& param0) = 0; |
| |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method4 |
| virtual void Method4(StructCPtr param0, const std::vector<uint8_t>& param1) = 0; |
| |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method5 |
| virtual void Method5(StructEPtr param0, ::mojo::ScopedDataPipeProducerHandle param1) = 0; |
| |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method6 |
| virtual void Method6(const std::vector<std::vector<uint8_t>>& param0) = 0; |
| |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method7 |
| virtual void Method7(StructFPtr param0, const std::vector<absl::optional<std::vector<uint8_t>>>& param1) = 0; |
| |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method8 |
| virtual void Method8(const std::vector<absl::optional<std::vector<std::string>>>& param0) = 0; |
| |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method9 |
| virtual void Method9(absl::optional<std::vector<std::vector<::mojo::ScopedHandle>>> param0) = 0; |
| |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method10 |
| virtual void Method10(const base::flat_map<std::string, uint8_t>& param0) = 0; |
| |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method11 |
| virtual void Method11(StructGPtr param0) = 0; |
| |
| |
| using Method12Callback = base::OnceCallback<void(float)>; |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method12 |
| virtual void Method12(float param0, Method12Callback callback) = 0; |
| |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method13 |
| virtual void Method13(::mojo::PendingRemote<InterfaceA> param0, uint32_t param1, ::mojo::PendingRemote<InterfaceA> param2) = 0; |
| |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method14 |
| virtual void Method14(EnumA param0, EnumB param1) = 0; |
| |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method15 |
| virtual void Method15(const absl::optional<std::vector<EnumA>>& param0, const absl::optional<std::vector<EnumB>>& param1) = 0; |
| |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method16 |
| virtual void Method16(const absl::optional<base::flat_map<EnumA, EnumA>>& param0) = 0; |
| |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method17 |
| virtual void Method17(std::vector<::mojo::PendingRemote<InterfaceA>> param0) = 0; |
| |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method18 |
| virtual void Method18(UnionAPtr param0) = 0; |
| |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method19 |
| virtual void Method19(RecursivePtr recursive) = 0; |
| |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method20 |
| virtual void Method20(base::flat_map<StructBPtr, uint8_t> param0) = 0; |
| |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method21 |
| virtual void Method21(ExtensibleEmptyEnum param0) = 0; |
| |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method22 |
| virtual void Method22(EmptyEnum param0) = 0; |
| }; |
| |
| class IntegrationTestInterfaceProxy; |
| |
| template <typename ImplRefTraits> |
| class IntegrationTestInterfaceStub; |
| |
| class IntegrationTestInterfaceRequestValidator; |
| class IntegrationTestInterfaceResponseValidator; |
| |
| |
| // @generated_from: mojo.test.IntegrationTestInterface |
| class IntegrationTestInterface |
| : public IntegrationTestInterfaceInterfaceBase { |
| public: |
| static const char Name_[]; |
| static std::pair<uint32_t, const void*> MessageToMethodInfo_(mojo::Message& message); |
| static const char* MessageToMethodName_(mojo::Message& message); |
| static constexpr uint32_t Version_ = 0; |
| static constexpr bool PassesAssociatedKinds_ = false; |
| static constexpr bool HasSyncMethods_ = false; |
| static constexpr bool HasUninterruptableMethods_ = false; |
| |
| using Base_ = IntegrationTestInterfaceInterfaceBase; |
| using Proxy_ = IntegrationTestInterfaceProxy; |
| |
| template <typename ImplRefTraits> |
| using Stub_ = IntegrationTestInterfaceStub<ImplRefTraits>; |
| |
| using RequestValidator_ = IntegrationTestInterfaceRequestValidator; |
| using ResponseValidator_ = IntegrationTestInterfaceResponseValidator; |
| enum MethodMinVersions : uint32_t { |
| kMethod0MinVersion = 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 Method0_Sym { |
| NOINLINE static void IPCSymbol(); |
| }; |
| #endif // !BUILDFLAG(IS_FUCHSIA) |
| virtual ~IntegrationTestInterface() = default; |
| |
| |
| using Method0Callback = base::OnceCallback<void(const std::vector<uint8_t>&)>; |
| |
| // @generated_from: mojo.test.IntegrationTestInterface.Method0 |
| virtual void Method0(BasicStructPtr param0, Method0Callback callback) = 0; |
| }; |
| |
| |
| |
| // @generated_from: mojo.test.InterfaceA |
| class InterfaceAProxy |
| : public InterfaceA { |
| public: |
| using InterfaceType = InterfaceA; |
| |
| explicit InterfaceAProxy(mojo::MessageReceiverWithResponder* receiver); |
| |
| private: |
| mojo::MessageReceiverWithResponder* receiver_; |
| }; |
| |
| |
| |
| // @generated_from: mojo.test.BoundsCheckTestInterface |
| class BoundsCheckTestInterfaceProxy |
| : public BoundsCheckTestInterface { |
| public: |
| using InterfaceType = BoundsCheckTestInterface; |
| |
| explicit BoundsCheckTestInterfaceProxy(mojo::MessageReceiverWithResponder* receiver); |
| |
| // @generated_from: mojo.test.BoundsCheckTestInterface.Method0 |
| void Method0(uint8_t param0, Method0Callback callback) final; |
| |
| // @generated_from: mojo.test.BoundsCheckTestInterface.Method1 |
| void Method1(uint8_t param0) final; |
| |
| private: |
| mojo::MessageReceiverWithResponder* receiver_; |
| }; |
| |
| |
| |
| // @generated_from: mojo.test.ConformanceTestInterface |
| class ConformanceTestInterfaceProxy |
| : public ConformanceTestInterface { |
| public: |
| using InterfaceType = ConformanceTestInterface; |
| |
| explicit ConformanceTestInterfaceProxy(mojo::MessageReceiverWithResponder* receiver); |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method0 |
| void Method0(float param0) final; |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method1 |
| void Method1(StructAPtr param0) final; |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method2 |
| void Method2(StructBPtr param0, StructAPtr param1) final; |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method3 |
| void Method3(const std::vector<bool>& param0) final; |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method4 |
| void Method4(StructCPtr param0, const std::vector<uint8_t>& param1) final; |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method5 |
| void Method5(StructEPtr param0, ::mojo::ScopedDataPipeProducerHandle param1) final; |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method6 |
| void Method6(const std::vector<std::vector<uint8_t>>& param0) final; |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method7 |
| void Method7(StructFPtr param0, const std::vector<absl::optional<std::vector<uint8_t>>>& param1) final; |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method8 |
| void Method8(const std::vector<absl::optional<std::vector<std::string>>>& param0) final; |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method9 |
| void Method9(absl::optional<std::vector<std::vector<::mojo::ScopedHandle>>> param0) final; |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method10 |
| void Method10(const base::flat_map<std::string, uint8_t>& param0) final; |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method11 |
| void Method11(StructGPtr param0) final; |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method12 |
| void Method12(float param0, Method12Callback callback) final; |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method13 |
| void Method13(::mojo::PendingRemote<InterfaceA> param0, uint32_t param1, ::mojo::PendingRemote<InterfaceA> param2) final; |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method14 |
| void Method14(EnumA param0, EnumB param1) final; |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method15 |
| void Method15(const absl::optional<std::vector<EnumA>>& param0, const absl::optional<std::vector<EnumB>>& param1) final; |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method16 |
| void Method16(const absl::optional<base::flat_map<EnumA, EnumA>>& param0) final; |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method17 |
| void Method17(std::vector<::mojo::PendingRemote<InterfaceA>> param0) final; |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method18 |
| void Method18(UnionAPtr param0) final; |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method19 |
| void Method19(RecursivePtr recursive) final; |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method20 |
| void Method20(base::flat_map<StructBPtr, uint8_t> param0) final; |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method21 |
| void Method21(ExtensibleEmptyEnum param0) final; |
| |
| // @generated_from: mojo.test.ConformanceTestInterface.Method22 |
| void Method22(EmptyEnum param0) final; |
| |
| private: |
| mojo::MessageReceiverWithResponder* receiver_; |
| }; |
| |
| |
| |
| // @generated_from: mojo.test.IntegrationTestInterface |
| class IntegrationTestInterfaceProxy |
| : public IntegrationTestInterface { |
| public: |
| using InterfaceType = IntegrationTestInterface; |
| |
| explicit IntegrationTestInterfaceProxy(mojo::MessageReceiverWithResponder* receiver); |
| |
| // @generated_from: mojo.test.IntegrationTestInterface.Method0 |
| void Method0(BasicStructPtr param0, Method0Callback callback) final; |
| |
| private: |
| mojo::MessageReceiverWithResponder* receiver_; |
| }; |
| class InterfaceAStubDispatch { |
| public: |
| static bool Accept(InterfaceA* impl, mojo::Message* message); |
| static bool AcceptWithResponder( |
| InterfaceA* impl, |
| mojo::Message* message, |
| std::unique_ptr<mojo::MessageReceiverWithStatus> responder); |
| }; |
| |
| template <typename ImplRefTraits = |
| mojo::RawPtrImplRefTraits<InterfaceA>> |
| class InterfaceAStub |
| : public mojo::MessageReceiverWithResponderStatus { |
| public: |
| using ImplPointerType = typename ImplRefTraits::PointerType; |
| |
| InterfaceAStub() = default; |
| ~InterfaceAStub() 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 InterfaceAStubDispatch::Accept( |
| ImplRefTraits::GetRawPointer(&sink_), message); |
| } |
| |
| bool AcceptWithResponder( |
| mojo::Message* message, |
| std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override { |
| if (ImplRefTraits::IsNull(sink_)) |
| return false; |
| return InterfaceAStubDispatch::AcceptWithResponder( |
| ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder)); |
| } |
| |
| private: |
| ImplPointerType sink_; |
| }; |
| class BoundsCheckTestInterfaceStubDispatch { |
| public: |
| static bool Accept(BoundsCheckTestInterface* impl, mojo::Message* message); |
| static bool AcceptWithResponder( |
| BoundsCheckTestInterface* impl, |
| mojo::Message* message, |
| std::unique_ptr<mojo::MessageReceiverWithStatus> responder); |
| }; |
| |
| template <typename ImplRefTraits = |
| mojo::RawPtrImplRefTraits<BoundsCheckTestInterface>> |
| class BoundsCheckTestInterfaceStub |
| : public mojo::MessageReceiverWithResponderStatus { |
| public: |
| using ImplPointerType = typename ImplRefTraits::PointerType; |
| |
| BoundsCheckTestInterfaceStub() = default; |
| ~BoundsCheckTestInterfaceStub() 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 BoundsCheckTestInterfaceStubDispatch::Accept( |
| ImplRefTraits::GetRawPointer(&sink_), message); |
| } |
| |
| bool AcceptWithResponder( |
| mojo::Message* message, |
| std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override { |
| if (ImplRefTraits::IsNull(sink_)) |
| return false; |
| return BoundsCheckTestInterfaceStubDispatch::AcceptWithResponder( |
| ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder)); |
| } |
| |
| private: |
| ImplPointerType sink_; |
| }; |
| class ConformanceTestInterfaceStubDispatch { |
| public: |
| static bool Accept(ConformanceTestInterface* impl, mojo::Message* message); |
| static bool AcceptWithResponder( |
| ConformanceTestInterface* impl, |
| mojo::Message* message, |
| std::unique_ptr<mojo::MessageReceiverWithStatus> responder); |
| }; |
| |
| template <typename ImplRefTraits = |
| mojo::RawPtrImplRefTraits<ConformanceTestInterface>> |
| class ConformanceTestInterfaceStub |
| : public mojo::MessageReceiverWithResponderStatus { |
| public: |
| using ImplPointerType = typename ImplRefTraits::PointerType; |
| |
| ConformanceTestInterfaceStub() = default; |
| ~ConformanceTestInterfaceStub() 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 ConformanceTestInterfaceStubDispatch::Accept( |
| ImplRefTraits::GetRawPointer(&sink_), message); |
| } |
| |
| bool AcceptWithResponder( |
| mojo::Message* message, |
| std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override { |
| if (ImplRefTraits::IsNull(sink_)) |
| return false; |
| return ConformanceTestInterfaceStubDispatch::AcceptWithResponder( |
| ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder)); |
| } |
| |
| private: |
| ImplPointerType sink_; |
| }; |
| class IntegrationTestInterfaceStubDispatch { |
| public: |
| static bool Accept(IntegrationTestInterface* impl, mojo::Message* message); |
| static bool AcceptWithResponder( |
| IntegrationTestInterface* impl, |
| mojo::Message* message, |
| std::unique_ptr<mojo::MessageReceiverWithStatus> responder); |
| }; |
| |
| template <typename ImplRefTraits = |
| mojo::RawPtrImplRefTraits<IntegrationTestInterface>> |
| class IntegrationTestInterfaceStub |
| : public mojo::MessageReceiverWithResponderStatus { |
| public: |
| using ImplPointerType = typename ImplRefTraits::PointerType; |
| |
| IntegrationTestInterfaceStub() = default; |
| ~IntegrationTestInterfaceStub() 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 IntegrationTestInterfaceStubDispatch::Accept( |
| ImplRefTraits::GetRawPointer(&sink_), message); |
| } |
| |
| bool AcceptWithResponder( |
| mojo::Message* message, |
| std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override { |
| if (ImplRefTraits::IsNull(sink_)) |
| return false; |
| return IntegrationTestInterfaceStubDispatch::AcceptWithResponder( |
| ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder)); |
| } |
| |
| private: |
| ImplPointerType sink_; |
| }; |
| class InterfaceARequestValidator : public mojo::MessageReceiver { |
| public: |
| bool Accept(mojo::Message* message) override; |
| }; |
| class BoundsCheckTestInterfaceRequestValidator : public mojo::MessageReceiver { |
| public: |
| bool Accept(mojo::Message* message) override; |
| }; |
| class ConformanceTestInterfaceRequestValidator : public mojo::MessageReceiver { |
| public: |
| bool Accept(mojo::Message* message) override; |
| }; |
| class IntegrationTestInterfaceRequestValidator : public mojo::MessageReceiver { |
| public: |
| bool Accept(mojo::Message* message) override; |
| }; |
| class BoundsCheckTestInterfaceResponseValidator : public mojo::MessageReceiver { |
| public: |
| bool Accept(mojo::Message* message) override; |
| }; |
| class ConformanceTestInterfaceResponseValidator : public mojo::MessageReceiver { |
| public: |
| bool Accept(mojo::Message* message) override; |
| }; |
| class IntegrationTestInterfaceResponseValidator : public mojo::MessageReceiver { |
| public: |
| bool Accept(mojo::Message* message) override; |
| }; |
| |
| |
| |
| |
| |
| // @generated_from: mojo.test.StructA |
| class StructA { |
| public: |
| template <typename T> |
| using EnableIfSame = std::enable_if_t<std::is_same<StructA, T>::value>; |
| using DataView = StructADataView; |
| using Data_ = internal::StructA_Data; |
| |
| template <typename... Args> |
| static StructAPtr New(Args&&... args) { |
| return StructAPtr( |
| absl::in_place, std::forward<Args>(args)...); |
| } |
| |
| template <typename U> |
| static StructAPtr From(const U& u) { |
| return mojo::TypeConverter<StructAPtr, U>::Convert(u); |
| } |
| |
| template <typename U> |
| U To() const { |
| return mojo::TypeConverter<U, StructA>::Convert(*this); |
| } |
| |
| |
| StructA(); |
| |
| explicit StructA( |
| uint64_t i); |
| |
| |
| ~StructA(); |
| |
| // 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 = StructAPtr> |
| StructAPtr 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, StructA::EnableIfSame<T>* = nullptr> |
| bool Equals(const T& other) const; |
| |
| template <typename T, StructA::EnableIfSame<T>* = nullptr> |
| bool operator==(const T& rhs) const { return Equals(rhs); } |
| size_t Hash(size_t seed) const; |
| template <typename UserType> |
| static std::vector<uint8_t> Serialize(UserType* input) { |
| return mojo::internal::SerializeImpl< |
| StructA::DataView, std::vector<uint8_t>>(input); |
| } |
| |
| template <typename UserType> |
| static mojo::Message SerializeAsMessage(UserType* input) { |
| return mojo::internal::SerializeAsMessageImpl< |
| StructA::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::StructA_UnserializedMessageContext< |
| UserType, StructA::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<StructA::DataView>( |
| message, data, data_num_bytes, output, Validate); |
| } |
| |
| template <typename UserType> |
| static bool Deserialize(const std::vector<uint8_t>& input, |
| UserType* output) { |
| return StructA::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::StructA_UnserializedMessageContext< |
| UserType, StructA::DataView>>(); |
| if (context) { |
| *output = std::move(context->TakeData()); |
| return true; |
| } |
| input.SerializeIfNecessary(); |
| return mojo::internal::DeserializeImpl<StructA::DataView>( |
| input, input.payload(), input.payload_num_bytes(), output, Validate); |
| } |
| |
| |
| // @generated_from: mojo.test.StructA.i |
| uint64_t i; |
| |
| // 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, StructA::EnableIfSame<T>* = nullptr> |
| bool operator<(const T& lhs, const T& rhs); |
| |
| template <typename T, StructA::EnableIfSame<T>* = nullptr> |
| bool operator<=(const T& lhs, const T& rhs) { |
| return !(rhs < lhs); |
| } |
| |
| template <typename T, StructA::EnableIfSame<T>* = nullptr> |
| bool operator>(const T& lhs, const T& rhs) { |
| return rhs < lhs; |
| } |
| |
| template <typename T, StructA::EnableIfSame<T>* = nullptr> |
| bool operator>=(const T& lhs, const T& rhs) { |
| return !(lhs < rhs); |
| } |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| // @generated_from: mojo.test.BasicStruct |
| class BasicStruct { |
| public: |
| template <typename T> |
| using EnableIfSame = std::enable_if_t<std::is_same<BasicStruct, T>::value>; |
| using DataView = BasicStructDataView; |
| using Data_ = internal::BasicStruct_Data; |
| |
| template <typename... Args> |
| static BasicStructPtr New(Args&&... args) { |
| return BasicStructPtr( |
| absl::in_place, std::forward<Args>(args)...); |
| } |
| |
| template <typename U> |
| static BasicStructPtr From(const U& u) { |
| return mojo::TypeConverter<BasicStructPtr, U>::Convert(u); |
| } |
| |
| template <typename U> |
| U To() const { |
| return mojo::TypeConverter<U, BasicStruct>::Convert(*this); |
| } |
| |
| |
| BasicStruct(); |
| |
| explicit BasicStruct( |
| int32_t a); |
| |
| |
| ~BasicStruct(); |
| |
| // 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 = BasicStructPtr> |
| BasicStructPtr 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, BasicStruct::EnableIfSame<T>* = nullptr> |
| bool Equals(const T& other) const; |
| |
| template <typename T, BasicStruct::EnableIfSame<T>* = nullptr> |
| bool operator==(const T& rhs) const { return Equals(rhs); } |
| size_t Hash(size_t seed) const; |
| template <typename UserType> |
| static std::vector<uint8_t> Serialize(UserType* input) { |
| return mojo::internal::SerializeImpl< |
| BasicStruct::DataView, std::vector<uint8_t>>(input); |
| } |
| |
| template <typename UserType> |
| static mojo::Message SerializeAsMessage(UserType* input) { |
| return mojo::internal::SerializeAsMessageImpl< |
| BasicStruct::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::BasicStruct_UnserializedMessageContext< |
| UserType, BasicStruct::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<BasicStruct::DataView>( |
| message, data, data_num_bytes, output, Validate); |
| } |
| |
| template <typename UserType> |
| static bool Deserialize(const std::vector<uint8_t>& input, |
| UserType* output) { |
| return BasicStruct::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::BasicStruct_UnserializedMessageContext< |
| UserType, BasicStruct::DataView>>(); |
| if (context) { |
| *output = std::move(context->TakeData()); |
| return true; |
| } |
| input.SerializeIfNecessary(); |
| return mojo::internal::DeserializeImpl<BasicStruct::DataView>( |
| input, input.payload(), input.payload_num_bytes(), output, Validate); |
| } |
| |
| |
| // @generated_from: mojo.test.BasicStruct.a |
| int32_t a; |
| |
| // 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, BasicStruct::EnableIfSame<T>* = nullptr> |
| bool operator<(const T& lhs, const T& rhs); |
| |
| template <typename T, BasicStruct::EnableIfSame<T>* = nullptr> |
| bool operator<=(const T& lhs, const T& rhs) { |
| return !(rhs < lhs); |
| } |
| |
| template <typename T, BasicStruct::EnableIfSame<T>* = nullptr> |
| bool operator>(const T& lhs, const T& rhs) { |
| return rhs < lhs; |
| } |
| |
| template <typename T, BasicStruct::EnableIfSame<T>* = nullptr> |
| bool operator>=(const T& lhs, const T& rhs) { |
| return !(lhs < rhs); |
| } |
| |
| |
| |
| |
| |
| // @generated_from: mojo.test.StructWithEnum |
| class StructWithEnum { |
| public: |
| template <typename T> |
| using EnableIfSame = std::enable_if_t<std::is_same<StructWithEnum, T>::value>; |
| using DataView = StructWithEnumDataView; |
| using Data_ = internal::StructWithEnum_Data; |
| // @generated_from: mojo.test.StructWithEnum.EnumWithin |
| using EnumWithin = StructWithEnum_EnumWithin; |
| |
| template <typename... Args> |
| static StructWithEnumPtr New(Args&&... args) { |
| return StructWithEnumPtr( |
| absl::in_place, std::forward<Args>(args)...); |
| } |
| |
| template <typename U> |
| static StructWithEnumPtr From(const U& u) { |
| return mojo::TypeConverter<StructWithEnumPtr, U>::Convert(u); |
| } |
| |
| template <typename U> |
| U To() const { |
| return mojo::TypeConverter<U, StructWithEnum>::Convert(*this); |
| } |
| |
| |
| StructWithEnum(); |
| |
| |
| ~StructWithEnum(); |
| |
| // 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 = StructWithEnumPtr> |
| StructWithEnumPtr 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, StructWithEnum::EnableIfSame<T>* = nullptr> |
| bool Equals(const T& other) const; |
| |
| template <typename T, StructWithEnum::EnableIfSame<T>* = nullptr> |
| bool operator==(const T& rhs) const { return Equals(rhs); } |
| size_t Hash(size_t seed) const; |
| template <typename UserType> |
| static std::vector<uint8_t> Serialize(UserType* input) { |
| return mojo::internal::SerializeImpl< |
| StructWithEnum::DataView, std::vector<uint8_t>>(input); |
| } |
| |
| template <typename UserType> |
| static mojo::Message SerializeAsMessage(UserType* input) { |
| return mojo::internal::SerializeAsMessageImpl< |
| StructWithEnum::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::StructWithEnum_UnserializedMessageContext< |
| UserType, StructWithEnum::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<StructWithEnum::DataView>( |
| message, data, data_num_bytes, output, Validate); |
| } |
| |
| template <typename UserType> |
| static bool Deserialize(const std::vector<uint8_t>& input, |
| UserType* output) { |
| return StructWithEnum::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::StructWithEnum_UnserializedMessageContext< |
| UserType, StructWithEnum::DataView>>(); |
| if (context) { |
| *output = std::move(context->TakeData()); |
| return true; |
| } |
| input.SerializeIfNecessary(); |
| return mojo::internal::DeserializeImpl<StructWithEnum::DataView>( |
| input, input.payload(), input.payload_num_bytes(), output, Validate); |
| } |
| |
| |
| // 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, StructWithEnum::EnableIfSame<T>* = nullptr> |
| bool operator<(const T& lhs, const T& rhs); |
| |
| template <typename T, StructWithEnum::EnableIfSame<T>* = nullptr> |
| bool operator<=(const T& lhs, const T& rhs) { |
| return !(rhs < lhs); |
| } |
| |
| template <typename T, StructWithEnum::EnableIfSame<T>* = nullptr> |
| bool operator>(const T& lhs, const T& rhs) { |
| return rhs < lhs; |
| } |
| |
| template <typename T, StructWithEnum::EnableIfSame<T>* = nullptr> |
| bool operator>=(const T& lhs, const T& rhs) { |
| return !(lhs < rhs); |
| } |
| |
| |
| |
| |
| |
| |
| // @generated_from: mojo.test.UnionA |
| class UnionA { |
| public: |
| using DataView = UnionADataView; |
| using Data_ = internal::UnionA_Data; |
| using Tag = Data_::UnionA_Tag; |
| |
| template <typename... Args> |
| static UnionAPtr New(Args&&... args) { |
| static_assert( |
| sizeof...(args) < 0, |
| "Do not use Union::New(); to create a union of a given subtype, use " |
| "New<SubType>(), not New() followed by set_<sub_type>(). To represent " |
| "an empty union, mark the field or parameter as nullable in the mojom " |
| "definition."); |
| } |
| // Construct an instance holding |struct_a|. |
| static UnionAPtr |
| NewStructA( |
| StructAPtr struct_a) { |
| auto result = UnionAPtr(absl::in_place); |
| result->set_struct_a(std::move(struct_a)); |
| return result; |
| } |
| // Construct an instance holding |b|. |
| static UnionAPtr |
| NewB( |
| bool b) { |
| auto result = UnionAPtr(absl::in_place); |
| result->set_b(std::move(b)); |
| return result; |
| } |
| |
| template <typename U> |
| static UnionAPtr From(const U& u) { |
| return mojo::TypeConverter<UnionAPtr, U>::Convert(u); |
| } |
| |
| template <typename U> |
| U To() const { |
| return mojo::TypeConverter<U, UnionA>::Convert(*this); |
| } |
| |
| UnionA(); |
| ~UnionA(); |
| |
| // 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 = UnionAPtr> |
| UnionAPtr 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, UnionA>::value>::type* = nullptr> |
| bool Equals(const T& other) const; |
| |
| template <typename T, |
| typename std::enable_if<std::is_same< |
| T, UnionA>::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.UnionA.struct_a |
| bool is_struct_a() const { return tag_ == Tag::kStructA; } |
| |
| |
| // @generated_from: mojo.test.UnionA.struct_a |
| StructAPtr& get_struct_a() const { |
| CHECK(tag_ == Tag::kStructA); |
| return *(data_.struct_a); |
| } |
| |
| |
| // @generated_from: mojo.test.UnionA.struct_a |
| void set_struct_a( |
| StructAPtr struct_a); |
| |
| // @generated_from: mojo.test.UnionA.b |
| bool is_b() const { return tag_ == Tag::kB; } |
| |
| |
| // @generated_from: mojo.test.UnionA.b |
| bool get_b() const { |
| CHECK(tag_ == Tag::kB); |
| return data_.b; |
| } |
| |
| |
| // @generated_from: mojo.test.UnionA.b |
| void set_b( |
| bool b); |
| |
| template <typename UserType> |
| static mojo::Message SerializeAsMessage(UserType* input) { |
| return mojo::internal::SerializeAsMessageImpl< |
| UnionA::DataView>(input); |
| } |
| |
| template <typename UserType> |
| static bool DeserializeFromMessage(mojo::Message input, |
| UserType* output) { |
| return mojo::internal::DeserializeImpl<UnionA::DataView>( |
| input, input.payload(), input.payload_num_bytes(), output, Validate); |
| } |
| |
| private: |
| union Union_ { |
| Union_() = default; |
| ~Union_() = default; |
| StructAPtr* struct_a; |
| bool b; |
| }; |
| |
| static bool Validate(const void* data, |
| mojo::internal::ValidationContext* validation_context); |
| |
| void DestroyActive(); |
| Tag tag_; |
| Union_ data_; |
| }; |
| |
| |
| |
| |
| |
| |
| // @generated_from: mojo.test.StructB |
| class StructB { |
| public: |
| template <typename T> |
| using EnableIfSame = std::enable_if_t<std::is_same<StructB, T>::value>; |
| using DataView = StructBDataView; |
| using Data_ = internal::StructB_Data; |
| |
| template <typename... Args> |
| static StructBPtr New(Args&&... args) { |
| return StructBPtr( |
| absl::in_place, std::forward<Args>(args)...); |
| } |
| |
| template <typename U> |
| static StructBPtr From(const U& u) { |
| return mojo::TypeConverter<StructBPtr, U>::Convert(u); |
| } |
| |
| template <typename U> |
| U To() const { |
| return mojo::TypeConverter<U, StructB>::Convert(*this); |
| } |
| |
| |
| StructB(); |
| |
| explicit StructB( |
| StructAPtr struct_a); |
| |
| StructB(const StructB&) = delete; |
| StructB& operator=(const StructB&) = delete; |
| |
| ~StructB(); |
| |
| // 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 = StructBPtr> |
| StructBPtr 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, StructB::EnableIfSame<T>* = nullptr> |
| bool Equals(const T& other) const; |
| |
| template <typename T, StructB::EnableIfSame<T>* = nullptr> |
| bool operator==(const T& rhs) const { return Equals(rhs); } |
| size_t Hash(size_t seed) const; |
| template <typename UserType> |
| static std::vector<uint8_t> Serialize(UserType* input) { |
| return mojo::internal::SerializeImpl< |
| StructB::DataView, std::vector<uint8_t>>(input); |
| } |
| |
| template <typename UserType> |
| static mojo::Message SerializeAsMessage(UserType* input) { |
| return mojo::internal::SerializeAsMessageImpl< |
| StructB::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::StructB_UnserializedMessageContext< |
| UserType, StructB::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<StructB::DataView>( |
| message, data, data_num_bytes, output, Validate); |
| } |
| |
| template <typename UserType> |
| static bool Deserialize(const std::vector<uint8_t>& input, |
| UserType* output) { |
| return StructB::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::StructB_UnserializedMessageContext< |
| UserType, StructB::DataView>>(); |
| if (context) { |
| *output = std::move(context->TakeData()); |
| return true; |
| } |
| input.SerializeIfNecessary(); |
| return mojo::internal::DeserializeImpl<StructB::DataView>( |
| input, input.payload(), input.payload_num_bytes(), output, Validate); |
| } |
| |
| |
| // @generated_from: mojo.test.StructB.struct_a |
| StructAPtr struct_a; |
| |
| // 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, StructB::EnableIfSame<T>* = nullptr> |
| bool operator<(const T& lhs, const T& rhs); |
| |
| template <typename T, StructB::EnableIfSame<T>* = nullptr> |
| bool operator<=(const T& lhs, const T& rhs) { |
| return !(rhs < lhs); |
| } |
| |
| template <typename T, StructB::EnableIfSame<T>* = nullptr> |
| bool operator>(const T& lhs, const T& rhs) { |
| return rhs < lhs; |
| } |
| |
| template <typename T, StructB::EnableIfSame<T>* = nullptr> |
| bool operator>=(const T& lhs, const T& rhs) { |
| return !(lhs < rhs); |
| } |
| |
| |
| |
| |
| |
| // @generated_from: mojo.test.StructC |
| class StructC { |
| public: |
| template <typename T> |
| using EnableIfSame = std::enable_if_t<std::is_same<StructC, T>::value>; |
| using DataView = StructCDataView; |
| using Data_ = internal::StructC_Data; |
| |
| template <typename... Args> |
| static StructCPtr New(Args&&... args) { |
| return StructCPtr( |
| absl::in_place, std::forward<Args>(args)...); |
| } |
| |
| template <typename U> |
| static StructCPtr From(const U& u) { |
| return mojo::TypeConverter<StructCPtr, U>::Convert(u); |
| } |
| |
| template <typename U> |
| U To() const { |
| return mojo::TypeConverter<U, StructC>::Convert(*this); |
| } |
| |
| |
| StructC(); |
| |
| explicit StructC( |
| std::vector<uint8_t> data); |
| |
| |
| ~StructC(); |
| |
| // 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 = StructCPtr> |
| StructCPtr 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, StructC::EnableIfSame<T>* = nullptr> |
| bool Equals(const T& other) const; |
| |
| template <typename T, StructC::EnableIfSame<T>* = nullptr> |
| bool operator==(const T& rhs) const { return Equals(rhs); } |
| template <typename UserType> |
| static std::vector<uint8_t> Serialize(UserType* input) { |
| return mojo::internal::SerializeImpl< |
| StructC::DataView, std::vector<uint8_t>>(input); |
| } |
| |
| template <typename UserType> |
| static mojo::Message SerializeAsMessage(UserType* input) { |
| return mojo::internal::SerializeAsMessageImpl< |
| StructC::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::StructC_UnserializedMessageContext< |
| UserType, StructC::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<StructC::DataView>( |
| message, data, data_num_bytes, output, Validate); |
| } |
| |
| template <typename UserType> |
| static bool Deserialize(const std::vector<uint8_t>& input, |
| UserType* output) { |
| return StructC::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::StructC_UnserializedMessageContext< |
| UserType, StructC::DataView>>(); |
| if (context) { |
| *output = std::move(context->TakeData()); |
| return true; |
| } |
| input.SerializeIfNecessary(); |
| return mojo::internal::DeserializeImpl<StructC::DataView>( |
| input, input.payload(), input.payload_num_bytes(), output, Validate); |
| } |
| |
| |
| // @generated_from: mojo.test.StructC.data |
| std::vector<uint8_t> data; |
| |
| // 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, StructC::EnableIfSame<T>* = nullptr> |
| bool operator<(const T& lhs, const T& rhs); |
| |
| template <typename T, StructC::EnableIfSame<T>* = nullptr> |
| bool operator<=(const T& lhs, const T& rhs) { |
| return !(rhs < lhs); |
| } |
| |
| template <typename T, StructC::EnableIfSame<T>* = nullptr> |
| bool operator>(const T& lhs, const T& rhs) { |
| return rhs < lhs; |
| } |
| |
| template <typename T, StructC::EnableIfSame<T>* = nullptr> |
| bool operator>=(const T& lhs, const T& rhs) { |
| return !(lhs < rhs); |
| } |
| |
| |
| |
| |
| |
| // @generated_from: mojo.test.StructD |
| class StructD { |
| public: |
| template <typename T> |
| using EnableIfSame = std::enable_if_t<std::is_same<StructD, T>::value>; |
| using DataView = StructDDataView; |
| using Data_ = internal::StructD_Data; |
| |
| template <typename... Args> |
| static StructDPtr New(Args&&... args) { |
| return StructDPtr( |
| absl::in_place, std::forward<Args>(args)...); |
| } |
| |
| template <typename U> |
| static StructDPtr From(const U& u) { |
| return mojo::TypeConverter<StructDPtr, U>::Convert(u); |
| } |
| |
| template <typename U> |
| U To() const { |
| return mojo::TypeConverter<U, StructD>::Convert(*this); |
| } |
| |
| |
| StructD(); |
| |
| explicit StructD( |
| std::vector<::mojo::ScopedMessagePipeHandle> message_pipes); |
| |
| StructD(const StructD&) = delete; |
| StructD& operator=(const StructD&) = delete; |
| |
| ~StructD(); |
| |
| // 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 = StructDPtr> |
| StructDPtr 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, StructD::EnableIfSame<T>* = nullptr> |
| bool Equals(const T& other) const; |
| |
| template <typename T, StructD::EnableIfSame<T>* = nullptr> |
| bool operator==(const T& rhs) const { return Equals(rhs); } |
| |
| template <typename UserType> |
| static mojo::Message SerializeAsMessage(UserType* input) { |
| return mojo::internal::SerializeAsMessageImpl< |
| StructD::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::StructD_UnserializedMessageContext< |
| UserType, StructD::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<StructD::DataView>( |
| message, data, data_num_bytes, output, Validate); |
| } |
| |
| template <typename UserType> |
| static bool Deserialize(const std::vector<uint8_t>& input, |
| UserType* output) { |
| return StructD::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::StructD_UnserializedMessageContext< |
| UserType, StructD::DataView>>(); |
| if (context) { |
| *output = std::move(context->TakeData()); |
| return true; |
| } |
| input.SerializeIfNecessary(); |
| return mojo::internal::DeserializeImpl<StructD::DataView>( |
| input, input.payload(), input.payload_num_bytes(), output, Validate); |
| } |
| |
| |
| // @generated_from: mojo.test.StructD.message_pipes |
| std::vector<::mojo::ScopedMessagePipeHandle> message_pipes; |
| |
| // 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, StructD::EnableIfSame<T>* = nullptr> |
| bool operator<(const T& lhs, const T& rhs); |
| |
| template <typename T, StructD::EnableIfSame<T>* = nullptr> |
| bool operator<=(const T& lhs, const T& rhs) { |
| return !(rhs < lhs); |
| } |
| |
| template <typename T, StructD::EnableIfSame<T>* = nullptr> |
| bool operator>(const T& lhs, const T& rhs) { |
| return rhs < lhs; |
| } |
| |
| template <typename T, StructD::EnableIfSame<T>* = nullptr> |
| bool operator>=(const T& lhs, const T& rhs) { |
| return !(lhs < rhs); |
| } |
| |
| |
| |
| |
| |
| // @generated_from: mojo.test.StructE |
| class StructE { |
| public: |
| template <typename T> |
| using EnableIfSame = std::enable_if_t<std::is_same<StructE, T>::value>; |
| using DataView = StructEDataView; |
| using Data_ = internal::StructE_Data; |
| |
| template <typename... Args> |
| static StructEPtr New(Args&&... args) { |
| return StructEPtr( |
| absl::in_place, std::forward<Args>(args)...); |
| } |
| |
| template <typename U> |
| static StructEPtr From(const U& u) { |
| return mojo::TypeConverter<StructEPtr, U>::Convert(u); |
| } |
| |
| template <typename U> |
| U To() const { |
| return mojo::TypeConverter<U, StructE>::Convert(*this); |
| } |
| |
| |
| StructE(); |
| |
| StructE( |
| StructDPtr struct_d, |
| ::mojo::ScopedDataPipeConsumerHandle data_pipe_consumer); |
| |
| StructE(const StructE&) = delete; |
| StructE& operator=(const StructE&) = delete; |
| |
| ~StructE(); |
| |
| // 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 = StructEPtr> |
| StructEPtr 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, StructE::EnableIfSame<T>* = nullptr> |
| bool Equals(const T& other) const; |
| |
| template <typename T, StructE::EnableIfSame<T>* = nullptr> |
| bool operator==(const T& rhs) const { return Equals(rhs); } |
| |
| template <typename UserType> |
| static mojo::Message SerializeAsMessage(UserType* input) { |
| return mojo::internal::SerializeAsMessageImpl< |
| StructE::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::StructE_UnserializedMessageContext< |
| UserType, StructE::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<StructE::DataView>( |
| message, data, data_num_bytes, output, Validate); |
| } |
| |
| template <typename UserType> |
| static bool Deserialize(const std::vector<uint8_t>& input, |
| UserType* output) { |
| return StructE::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::StructE_UnserializedMessageContext< |
| UserType, StructE::DataView>>(); |
| if (context) { |
| *output = std::move(context->TakeData()); |
| return true; |
| } |
| input.SerializeIfNecessary(); |
| return mojo::internal::DeserializeImpl<StructE::DataView>( |
| input, input.payload(), input.payload_num_bytes(), output, Validate); |
| } |
| |
| |
| // @generated_from: mojo.test.StructE.struct_d |
| StructDPtr struct_d; |
| |
| // @generated_from: mojo.test.StructE.data_pipe_consumer |
| ::mojo::ScopedDataPipeConsumerHandle data_pipe_consumer; |
| |
| // 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, StructE::EnableIfSame<T>* = nullptr> |
| bool operator<(const T& lhs, const T& rhs); |
| |
| template <typename T, StructE::EnableIfSame<T>* = nullptr> |
| bool operator<=(const T& lhs, const T& rhs) { |
| return !(rhs < lhs); |
| } |
| |
| template <typename T, StructE::EnableIfSame<T>* = nullptr> |
| bool operator>(const T& lhs, const T& rhs) { |
| return rhs < lhs; |
| } |
| |
| template <typename T, StructE::EnableIfSame<T>* = nullptr> |
| bool operator>=(const T& lhs, const T& rhs) { |
| return !(lhs < rhs); |
| } |
| |
| |
| |
| |
| |
| // @generated_from: mojo.test.StructF |
| class StructF { |
| public: |
| template <typename T> |
| using EnableIfSame = std::enable_if_t<std::is_same<StructF, T>::value>; |
| using DataView = StructFDataView; |
| using Data_ = internal::StructF_Data; |
| |
| template <typename... Args> |
| static StructFPtr New(Args&&... args) { |
| return StructFPtr( |
| absl::in_place, std::forward<Args>(args)...); |
| } |
| |
| template <typename U> |
| static StructFPtr From(const U& u) { |
| return mojo::TypeConverter<StructFPtr, U>::Convert(u); |
| } |
| |
| template <typename U> |
| U To() const { |
| return mojo::TypeConverter<U, StructF>::Convert(*this); |
| } |
| |
| |
| StructF(); |
| |
| explicit StructF( |
| std::vector<uint8_t> fixed_size_array); |
| |
| |
| ~StructF(); |
| |
| // 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 = StructFPtr> |
| StructFPtr 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, StructF::EnableIfSame<T>* = nullptr> |
| bool Equals(const T& other) const; |
| |
| template <typename T, StructF::EnableIfSame<T>* = nullptr> |
| bool operator==(const T& rhs) const { return Equals(rhs); } |
| template <typename UserType> |
| static std::vector<uint8_t> Serialize(UserType* input) { |
| return mojo::internal::SerializeImpl< |
| StructF::DataView, std::vector<uint8_t>>(input); |
| } |
| |
| template <typename UserType> |
| static mojo::Message SerializeAsMessage(UserType* input) { |
| return mojo::internal::SerializeAsMessageImpl< |
| StructF::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::StructF_UnserializedMessageContext< |
| UserType, StructF::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<StructF::DataView>( |
| message, data, data_num_bytes, output, Validate); |
| } |
| |
| template <typename UserType> |
| static bool Deserialize(const std::vector<uint8_t>& input, |
| UserType* output) { |
| return StructF::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::StructF_UnserializedMessageContext< |
| UserType, StructF::DataView>>(); |
| if (context) { |
| *output = std::move(context->TakeData()); |
| return true; |
| } |
| input.SerializeIfNecessary(); |
| return mojo::internal::DeserializeImpl<StructF::DataView>( |
| input, input.payload(), input.payload_num_bytes(), output, Validate); |
| } |
| |
| |
| // @generated_from: mojo.test.StructF.fixed_size_array |
| std::vector<uint8_t> fixed_size_array; |
| |
| // 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, StructF::EnableIfSame<T>* = nullptr> |
| bool operator<(const T& lhs, const T& rhs); |
| |
| template <typename T, StructF::EnableIfSame<T>* = nullptr> |
| bool operator<=(const T& lhs, const T& rhs) { |
| return !(rhs < lhs); |
| } |
| |
| template <typename T, StructF::EnableIfSame<T>* = nullptr> |
| bool operator>(const T& lhs, const T& rhs) { |
| return rhs < lhs; |
| } |
| |
| template <typename T, StructF::EnableIfSame<T>* = nullptr> |
| bool operator>=(const T& lhs, const T& rhs) { |
| return !(lhs < rhs); |
| } |
| |
| |
| |
| |
| |
| // @generated_from: mojo.test.StructG |
| class StructG { |
| public: |
| template <typename T> |
| using EnableIfSame = std::enable_if_t<std::is_same<StructG, T>::value>; |
| using DataView = StructGDataView; |
| using Data_ = internal::StructG_Data; |
| |
| template <typename... Args> |
| static StructGPtr New(Args&&... args) { |
| return StructGPtr( |
| absl::in_place, std::forward<Args>(args)...); |
| } |
| |
| template <typename U> |
| static StructGPtr From(const U& u) { |
| return mojo::TypeConverter<StructGPtr, U>::Convert(u); |
| } |
| |
| template <typename U> |
| U To() const { |
| return mojo::TypeConverter<U, StructG>::Convert(*this); |
| } |
| |
| |
| StructG(); |
| |
| explicit StructG( |
| int32_t i); |
| |
| StructG( |
| int32_t i, |
| StructAPtr struct_a); |
| |
| StructG( |
| int32_t i, |
| StructAPtr struct_a, |
| const absl::optional<std::string>& str, |
| bool b); |
| |
| StructG(const StructG&) = delete; |
| StructG& operator=(const StructG&) = delete; |
| |
| ~StructG(); |
| |
| // 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 = StructGPtr> |
| StructGPtr 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, StructG::EnableIfSame<T>* = nullptr> |
| bool Equals(const T& other) const; |
| |
| template <typename T, StructG::EnableIfSame<T>* = nullptr> |
| bool operator==(const T& rhs) const { return Equals(rhs); } |
| template <typename UserType> |
| static std::vector<uint8_t> Serialize(UserType* input) { |
| return mojo::internal::SerializeImpl< |
| StructG::DataView, std::vector<uint8_t>>(input); |
| } |
| |
| template <typename UserType> |
| static mojo::Message SerializeAsMessage(UserType* input) { |
| return mojo::internal::SerializeAsMessageImpl< |
| StructG::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::StructG_UnserializedMessageContext< |
| UserType, StructG::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<StructG::DataView>( |
| message, data, data_num_bytes, output, Validate); |
| } |
| |
| template <typename UserType> |
| static bool Deserialize(const std::vector<uint8_t>& input, |
| UserType* output) { |
| return StructG::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::StructG_UnserializedMessageContext< |
| UserType, StructG::DataView>>(); |
| if (context) { |
| *output = std::move(context->TakeData()); |
| return true; |
| } |
| input.SerializeIfNecessary(); |
| return mojo::internal::DeserializeImpl<StructG::DataView>( |
| input, input.payload(), input.payload_num_bytes(), output, Validate); |
| } |
| |
| |
| // @generated_from: mojo.test.StructG.i |
| int32_t i; |
| |
| // @generated_from: mojo.test.StructG.struct_a |
| StructAPtr struct_a; |
| |
| // @generated_from: mojo.test.StructG.str |
| absl::optional<std::string> str; |
| |
| // @generated_from: mojo.test.StructG.b |
| bool b; |
| |
| // 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, StructG::EnableIfSame<T>* = nullptr> |
| bool operator<(const T& lhs, const T& rhs); |
| |
| template <typename T, StructG::EnableIfSame<T>* = nullptr> |
| bool operator<=(const T& lhs, const T& rhs) { |
| return !(rhs < lhs); |
| } |
| |
| template <typename T, StructG::EnableIfSame<T>* = nullptr> |
| bool operator>(const T& lhs, const T& rhs) { |
| return rhs < lhs; |
| } |
| |
| template <typename T, StructG::EnableIfSame<T>* = nullptr> |
| bool operator>=(const T& lhs, const T& rhs) { |
| return !(lhs < rhs); |
| } |
| |
| |
| |
| |
| |
| |
| |
| // @generated_from: mojo.test.Recursive |
| class Recursive { |
| public: |
| template <typename T> |
| using EnableIfSame = std::enable_if_t<std::is_same<Recursive, T>::value>; |
| using DataView = RecursiveDataView; |
| using Data_ = internal::Recursive_Data; |
| |
| template <typename... Args> |
| static RecursivePtr New(Args&&... args) { |
| return RecursivePtr( |
| absl::in_place, std::forward<Args>(args)...); |
| } |
| |
| template <typename U> |
| static RecursivePtr From(const U& u) { |
| return mojo::TypeConverter<RecursivePtr, U>::Convert(u); |
| } |
| |
| template <typename U> |
| U To() const { |
| return mojo::TypeConverter<U, Recursive>::Convert(*this); |
| } |
| |
| |
| Recursive(); |
| |
| explicit Recursive( |
| RecursivePtr recursive); |
| |
| Recursive(const Recursive&) = delete; |
| Recursive& operator=(const Recursive&) = delete; |
| |
| ~Recursive(); |
| |
| // 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 = RecursivePtr> |
| RecursivePtr 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, Recursive::EnableIfSame<T>* = nullptr> |
| bool Equals(const T& other) const; |
| |
| template <typename T, Recursive::EnableIfSame<T>* = nullptr> |
| bool operator==(const T& rhs) const { return Equals(rhs); } |
| template <typename UserType> |
| static std::vector<uint8_t> Serialize(UserType* input) { |
| return mojo::internal::SerializeImpl< |
| Recursive::DataView, std::vector<uint8_t>>(input); |
| } |
| |
| template <typename UserType> |
| static mojo::Message SerializeAsMessage(UserType* input) { |
| return mojo::internal::SerializeAsMessageImpl< |
| Recursive::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::Recursive_UnserializedMessageContext< |
| UserType, Recursive::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<Recursive::DataView>( |
| message, data, data_num_bytes, output, Validate); |
| } |
| |
| template <typename UserType> |
| static bool Deserialize(const std::vector<uint8_t>& input, |
| UserType* output) { |
| return Recursive::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::Recursive_UnserializedMessageContext< |
| UserType, Recursive::DataView>>(); |
| if (context) { |
| *output = std::move(context->TakeData()); |
| return true; |
| } |
| input.SerializeIfNecessary(); |
| return mojo::internal::DeserializeImpl<Recursive::DataView>( |
| input, input.payload(), input.payload_num_bytes(), output, Validate); |
| } |
| |
| |
| // @generated_from: mojo.test.Recursive.recursive |
| RecursivePtr recursive; |
| |
| // 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, Recursive::EnableIfSame<T>* = nullptr> |
| bool operator<(const T& lhs, const T& rhs); |
| |
| template <typename T, Recursive::EnableIfSame<T>* = nullptr> |
| bool operator<=(const T& lhs, const T& rhs) { |
| return !(rhs < lhs); |
| } |
| |
| template <typename T, Recursive::EnableIfSame<T>* = nullptr> |
| bool operator>(const T& lhs, const T& rhs) { |
| return rhs < lhs; |
| } |
| |
| template <typename T, Recursive::EnableIfSame<T>* = nullptr> |
| bool operator>=(const T& lhs, const T& rhs) { |
| return !(lhs < rhs); |
| } |
| |
| template <typename UnionPtrType> |
| UnionAPtr UnionA::Clone() const { |
| switch (tag_) { |
| case Tag::kStructA: |
| return NewStructA( |
| mojo::Clone(*data_.struct_a)); |
| case Tag::kB: |
| return NewB( |
| mojo::Clone(data_.b)); |
| } |
| return nullptr; |
| } |
| |
| template <typename T, |
| typename std::enable_if<std::is_same< |
| T, UnionA>::value>::type*> |
| bool UnionA::Equals(const T& other) const { |
| if (tag_ != other.which()) |
| return false; |
| |
| switch (tag_) { |
| case Tag::kStructA: |
| return mojo::Equals(*(data_.struct_a), *(other.data_.struct_a)); |
| case Tag::kB: |
| return mojo::Equals(data_.b, other.data_.b); |
| } |
| |
| return false; |
| } |
| template <typename StructPtrType> |
| StructAPtr StructA::Clone() const { |
| return New( |
| mojo::Clone(i) |
| ); |
| } |
| |
| template <typename T, StructA::EnableIfSame<T>*> |
| bool StructA::Equals(const T& other_struct) const { |
| if (!mojo::Equals(this->i, other_struct.i)) |
| return false; |
| return true; |
| } |
| |
| template <typename T, StructA::EnableIfSame<T>*> |
| bool operator<(const T& lhs, const T& rhs) { |
| if (lhs.i < rhs.i) |
| return true; |
| if (rhs.i < lhs.i) |
| return false; |
| return false; |
| } |
| template <typename StructPtrType> |
| StructBPtr StructB::Clone() const { |
| return New( |
| mojo::Clone(struct_a) |
| ); |
| } |
| |
| template <typename T, StructB::EnableIfSame<T>*> |
| bool StructB::Equals(const T& other_struct) const { |
| if (!mojo::Equals(this->struct_a, other_struct.struct_a)) |
| return false; |
| return true; |
| } |
| |
| template <typename T, StructB::EnableIfSame<T>*> |
| bool operator<(const T& lhs, const T& rhs) { |
| if (lhs.struct_a < rhs.struct_a) |
| return true; |
| if (rhs.struct_a < lhs.struct_a) |
| return false; |
| return false; |
| } |
| template <typename StructPtrType> |
| StructCPtr StructC::Clone() const { |
| return New( |
| mojo::Clone(data) |
| ); |
| } |
| |
| template <typename T, StructC::EnableIfSame<T>*> |
| bool StructC::Equals(const T& other_struct) const { |
| if (!mojo::Equals(this->data, other_struct.data)) |
| return false; |
| return true; |
| } |
| |
| template <typename T, StructC::EnableIfSame<T>*> |
| bool operator<(const T& lhs, const T& rhs) { |
| if (lhs.data < rhs.data) |
| return true; |
| if (rhs.data < lhs.data) |
| return false; |
| return false; |
| } |
| template <typename StructPtrType> |
| StructDPtr StructD::Clone() const { |
| return New( |
| mojo::Clone(message_pipes) |
| ); |
| } |
| |
| template <typename T, StructD::EnableIfSame<T>*> |
| bool StructD::Equals(const T& other_struct) const { |
| if (!mojo::Equals(this->message_pipes, other_struct.message_pipes)) |
| return false; |
| return true; |
| } |
| |
| template <typename T, StructD::EnableIfSame<T>*> |
| bool operator<(const T& lhs, const T& rhs) { |
| if (lhs.message_pipes < rhs.message_pipes) |
| return true; |
| if (rhs.message_pipes < lhs.message_pipes) |
| return false; |
| return false; |
| } |
| template <typename StructPtrType> |
| StructEPtr StructE::Clone() const { |
| return New( |
| mojo::Clone(struct_d), |
| mojo::Clone(data_pipe_consumer) |
| ); |
| } |
| |
| template <typename T, StructE::EnableIfSame<T>*> |
| bool StructE::Equals(const T& other_struct) const { |
| if (!mojo::Equals(this->struct_d, other_struct.struct_d)) |
| return false; |
| if (!mojo::Equals(this->data_pipe_consumer, other_struct.data_pipe_consumer)) |
| return false; |
| return true; |
| } |
| |
| template <typename T, StructE::EnableIfSame<T>*> |
| bool operator<(const T& lhs, const T& rhs) { |
| if (lhs.struct_d < rhs.struct_d) |
| return true; |
| if (rhs.struct_d < lhs.struct_d) |
| return false; |
| if (lhs.data_pipe_consumer < rhs.data_pipe_consumer) |
| return true; |
| if (rhs.data_pipe_consumer < lhs.data_pipe_consumer) |
| return false; |
| return false; |
| } |
| template <typename StructPtrType> |
| StructFPtr StructF::Clone() const { |
| return New( |
| mojo::Clone(fixed_size_array) |
| ); |
| } |
| |
| template <typename T, StructF::EnableIfSame<T>*> |
| bool StructF::Equals(const T& other_struct) const { |
| if (!mojo::Equals(this->fixed_size_array, other_struct.fixed_size_array)) |
| return false; |
| return true; |
| } |
| |
| template <typename T, StructF::EnableIfSame<T>*> |
| bool operator<(const T& lhs, const T& rhs) { |
| if (lhs.fixed_size_array < rhs.fixed_size_array) |
| return true; |
| if (rhs.fixed_size_array < lhs.fixed_size_array) |
| return false; |
| return false; |
| } |
| template <typename StructPtrType> |
| StructGPtr StructG::Clone() const { |
| return New( |
| mojo::Clone(i), |
| mojo::Clone(struct_a), |
| mojo::Clone(str), |
| mojo::Clone(b) |
| ); |
| } |
| |
| template <typename T, StructG::EnableIfSame<T>*> |
| bool StructG::Equals(const T& other_struct) const { |
| if (!mojo::Equals(this->i, other_struct.i)) |
| return false; |
| if (!mojo::Equals(this->struct_a, other_struct.struct_a)) |
| return false; |
| if (!mojo::Equals(this->str, other_struct.str)) |
| return false; |
| if (!mojo::Equals(this->b, other_struct.b)) |
| return false; |
| return true; |
| } |
| |
| template <typename T, StructG::EnableIfSame<T>*> |
| bool operator<(const T& lhs, const T& rhs) { |
| if (lhs.i < rhs.i) |
| return true; |
| if (rhs.i < lhs.i) |
| return false; |
| if (lhs.struct_a < rhs.struct_a) |
| return true; |
| if (rhs.struct_a < lhs.struct_a) |
| return false; |
| if (lhs.str < rhs.str) |
| return true; |
| if (rhs.str < lhs.str) |
| return false; |
| if (lhs.b < rhs.b) |
| return true; |
| if (rhs.b < lhs.b) |
| return false; |
| return false; |
| } |
| template <typename StructPtrType> |
| BasicStructPtr BasicStruct::Clone() const { |
| return New( |
| mojo::Clone(a) |
| ); |
| } |
| |
| template <typename T, BasicStruct::EnableIfSame<T>*> |
| bool BasicStruct::Equals(const T& other_struct) const { |
| if (!mojo::Equals(this->a, other_struct.a)) |
| return false; |
| return true; |
| } |
| |
| template <typename T, BasicStruct::EnableIfSame<T>*> |
| bool operator<(const T& lhs, const T& rhs) { |
| if (lhs.a < rhs.a) |
| return true; |
| if (rhs.a < lhs.a) |
| return false; |
| return false; |
| } |
| template <typename StructPtrType> |
| StructWithEnumPtr StructWithEnum::Clone() const { |
| return New( |
| ); |
| } |
| |
| template <typename T, StructWithEnum::EnableIfSame<T>*> |
| bool StructWithEnum::Equals(const T& other_struct) const { |
| return true; |
| } |
| |
| template <typename T, StructWithEnum::EnableIfSame<T>*> |
| bool operator<(const T& lhs, const T& rhs) { |
| return false; |
| } |
| template <typename StructPtrType> |
| RecursivePtr Recursive::Clone() const { |
| return New( |
| mojo::Clone(recursive) |
| ); |
| } |
| |
| template <typename T, Recursive::EnableIfSame<T>*> |
| bool Recursive::Equals(const T& other_struct) const { |
| if (!mojo::Equals(this->recursive, other_struct.recursive)) |
| return false; |
| return true; |
| } |
| |
| template <typename T, Recursive::EnableIfSame<T>*> |
| bool operator<(const T& lhs, const T& rhs) { |
| if (lhs.recursive < rhs.recursive) |
| return true; |
| if (rhs.recursive < lhs.recursive) |
| return false; |
| return false; |
| } |
| |
| |
| } // namespace test |
| } // namespace mojo |
| |
| namespace mojo { |
| |
| |
| template <> |
| struct StructTraits<::mojo::test::StructA::DataView, |
| ::mojo::test::StructAPtr> { |
| static bool IsNull(const ::mojo::test::StructAPtr& input) { return !input; } |
| static void SetToNull(::mojo::test::StructAPtr* output) { output->reset(); } |
| |
| static decltype(::mojo::test::StructA::i) i( |
| const ::mojo::test::StructAPtr& input) { |
| return input->i; |
| } |
| |
| static bool Read(::mojo::test::StructA::DataView input, ::mojo::test::StructAPtr* output); |
| }; |
| |
| |
| template <> |
| struct StructTraits<::mojo::test::StructB::DataView, |
| ::mojo::test::StructBPtr> { |
| static bool IsNull(const ::mojo::test::StructBPtr& input) { return !input; } |
| static void SetToNull(::mojo::test::StructBPtr* output) { output->reset(); } |
| |
| static const decltype(::mojo::test::StructB::struct_a)& struct_a( |
| const ::mojo::test::StructBPtr& input) { |
| return input->struct_a; |
| } |
| |
| static bool Read(::mojo::test::StructB::DataView input, ::mojo::test::StructBPtr* output); |
| }; |
| |
| |
| template <> |
| struct StructTraits<::mojo::test::StructC::DataView, |
| ::mojo::test::StructCPtr> { |
| static bool IsNull(const ::mojo::test::StructCPtr& input) { return !input; } |
| static void SetToNull(::mojo::test::StructCPtr* output) { output->reset(); } |
| |
| static const decltype(::mojo::test::StructC::data)& data( |
| const ::mojo::test::StructCPtr& input) { |
| return input->data; |
| } |
| |
| static bool Read(::mojo::test::StructC::DataView input, ::mojo::test::StructCPtr* output); |
| }; |
| |
| |
| template <> |
| struct StructTraits<::mojo::test::StructD::DataView, |
| ::mojo::test::StructDPtr> { |
| static bool IsNull(const ::mojo::test::StructDPtr& input) { return !input; } |
| static void SetToNull(::mojo::test::StructDPtr* output) { output->reset(); } |
| |
| static decltype(::mojo::test::StructD::message_pipes)& message_pipes( |
| ::mojo::test::StructDPtr& input) { |
| return input->message_pipes; |
| } |
| |
| static bool Read(::mojo::test::StructD::DataView input, ::mojo::test::StructDPtr* output); |
| }; |
| |
| |
| template <> |
| struct StructTraits<::mojo::test::StructE::DataView, |
| ::mojo::test::StructEPtr> { |
| static bool IsNull(const ::mojo::test::StructEPtr& input) { return !input; } |
| static void SetToNull(::mojo::test::StructEPtr* output) { output->reset(); } |
| |
| static decltype(::mojo::test::StructE::struct_d)& struct_d( |
| ::mojo::test::StructEPtr& input) { |
| return input->struct_d; |
| } |
| |
| static decltype(::mojo::test::StructE::data_pipe_consumer)& data_pipe_consumer( |
| ::mojo::test::StructEPtr& input) { |
| return input->data_pipe_consumer; |
| } |
| |
| static bool Read(::mojo::test::StructE::DataView input, ::mojo::test::StructEPtr* output); |
| }; |
| |
| |
| template <> |
| struct StructTraits<::mojo::test::StructF::DataView, |
| ::mojo::test::StructFPtr> { |
| static bool IsNull(const ::mojo::test::StructFPtr& input) { return !input; } |
| static void SetToNull(::mojo::test::StructFPtr* output) { output->reset(); } |
| |
| static const decltype(::mojo::test::StructF::fixed_size_array)& fixed_size_array( |
| const ::mojo::test::StructFPtr& input) { |
| return input->fixed_size_array; |
| } |
| |
| static bool Read(::mojo::test::StructF::DataView input, ::mojo::test::StructFPtr* output); |
| }; |
| |
| |
| template <> |
| struct StructTraits<::mojo::test::StructG::DataView, |
| ::mojo::test::StructGPtr> { |
| static bool IsNull(const ::mojo::test::StructGPtr& input) { return !input; } |
| static void SetToNull(::mojo::test::StructGPtr* output) { output->reset(); } |
| |
| static decltype(::mojo::test::StructG::i) i( |
| const ::mojo::test::StructGPtr& input) { |
| return input->i; |
| } |
| |
| static const decltype(::mojo::test::StructG::struct_a)& struct_a( |
| const ::mojo::test::StructGPtr& input) { |
| return input->struct_a; |
| } |
| |
| static const decltype(::mojo::test::StructG::str)& str( |
| const ::mojo::test::StructGPtr& input) { |
| return input->str; |
| } |
| |
| static decltype(::mojo::test::StructG::b) b( |
| const ::mojo::test::StructGPtr& input) { |
| return input->b; |
| } |
| |
| static bool Read(::mojo::test::StructG::DataView input, ::mojo::test::StructGPtr* output); |
| }; |
| |
| |
| template <> |
| struct StructTraits<::mojo::test::BasicStruct::DataView, |
| ::mojo::test::BasicStructPtr> { |
| static bool IsNull(const ::mojo::test::BasicStructPtr& input) { return !input; } |
| static void SetToNull(::mojo::test::BasicStructPtr* output) { output->reset(); } |
| |
| static decltype(::mojo::test::BasicStruct::a) a( |
| const ::mojo::test::BasicStructPtr& input) { |
| return input->a; |
| } |
| |
| static bool Read(::mojo::test::BasicStruct::DataView input, ::mojo::test::BasicStructPtr* output); |
| }; |
| |
| |
| template <> |
| struct StructTraits<::mojo::test::StructWithEnum::DataView, |
| ::mojo::test::StructWithEnumPtr> { |
| static bool IsNull(const ::mojo::test::StructWithEnumPtr& input) { return !input; } |
| static void SetToNull(::mojo::test::StructWithEnumPtr* output) { output->reset(); } |
| |
| static bool Read(::mojo::test::StructWithEnum::DataView input, ::mojo::test::StructWithEnumPtr* output); |
| }; |
| |
| |
| template <> |
| struct StructTraits<::mojo::test::Recursive::DataView, |
| ::mojo::test::RecursivePtr> { |
| static bool IsNull(const ::mojo::test::RecursivePtr& input) { return !input; } |
| static void SetToNull(::mojo::test::RecursivePtr* output) { output->reset(); } |
| |
| static const decltype(::mojo::test::Recursive::recursive)& recursive( |
| const ::mojo::test::RecursivePtr& input) { |
| return input->recursive; |
| } |
| |
| static bool Read(::mojo::test::Recursive::DataView input, ::mojo::test::RecursivePtr* output); |
| }; |
| |
| |
| template <> |
| struct UnionTraits<::mojo::test::UnionA::DataView, |
| ::mojo::test::UnionAPtr> { |
| static bool IsNull(const ::mojo::test::UnionAPtr& input) { return !input; } |
| static void SetToNull(::mojo::test::UnionAPtr* output) { output->reset(); } |
| |
| static ::mojo::test::UnionA::Tag GetTag(const ::mojo::test::UnionAPtr& input) { |
| return input->which(); |
| } |
| |
| static const ::mojo::test::StructAPtr& struct_a(const ::mojo::test::UnionAPtr& input) { |
| return input->get_struct_a(); |
| } |
| |
| static bool b(const ::mojo::test::UnionAPtr& input) { |
| return input->get_b(); |
| } |
| |
| static bool Read(::mojo::test::UnionA::DataView input, ::mojo::test::UnionAPtr* output); |
| }; |
| |
| } // namespace mojo |
| |
| #endif // MOJO_PUBLIC_INTERFACES_BINDINGS_TESTS_VALIDATION_TEST_INTERFACES_MOJOM_H_ |
| |
| /* Metadata comment |
| eyJtZXRhIjogW3siZW5kIjogMTY0NCwgImJlZ2luIjogMTYzNCwgImVkZ2UiOiAiJS9reXRoZS9l |
| ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw |
| dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui |
| OiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5JbnRlcmZhY2VBIn19LCB7ImVuZCI6 |
| IDI5MTYsICJiZWdpbiI6IDI4OTIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAi |
| dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdv |
| b2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25h |
| dHVyZSI6ICJtb2pvLnRlc3QuQm91bmRzQ2hlY2tUZXN0SW50ZXJmYWNlIn19LCB7ImVuZCI6IDQz |
| MzEsICJiZWdpbiI6IDQzMjQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlw |
| ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2ds |
| ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVy |
| ZSI6ICJtb2pvLnRlc3QuQm91bmRzQ2hlY2tUZXN0SW50ZXJmYWNlLk1ldGhvZDAifX0sIHsiZW5k |
| IjogNDQ2OCwgImJlZ2luIjogNDQ2MSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs |
| ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u |
| Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln |
| bmF0dXJlIjogIm1vam8udGVzdC5Cb3VuZHNDaGVja1Rlc3RJbnRlcmZhY2UuTWV0aG9kMSJ9fSwg |
| eyJlbmQiOiA0Nzg4LCAiYmVnaW4iOiA0NzY0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh |
| dGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJv |
| bWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIs |
| ICJzaWduYXR1cmUiOiAibW9qby50ZXN0LkNvbmZvcm1hbmNlVGVzdEludGVyZmFjZSJ9fSwgeyJl |
| bmQiOiA4MTQxLCAiYmVnaW4iOiA4MTM0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVz |
| IiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1 |
| bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJz |
| aWduYXR1cmUiOiAibW9qby50ZXN0LkNvbmZvcm1hbmNlVGVzdEludGVyZmFjZS5NZXRob2QwIn19 |
| LCB7ImVuZCI6IDgyNTAsICJiZWdpbiI6IDgyNDMsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5l |
| cmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNo |
| cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9t |
| IiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuQ29uZm9ybWFuY2VUZXN0SW50ZXJmYWNlLk1ldGhv |
| ZDEifX0sIHsiZW5kIjogODM2NCwgImJlZ2luIjogODM1NywgImVkZ2UiOiAiJS9reXRoZS9lZGdl |
| L2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMi |
| OiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAi |
| bW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5Db25mb3JtYW5jZVRlc3RJbnRlcmZhY2Uu |
| TWV0aG9kMiJ9fSwgeyJlbmQiOiA4NDk3LCAiYmVnaW4iOiA4NDkwLCAiZWRnZSI6ICIlL2t5dGhl |
| L2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNv |
| cnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFn |
| ZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LkNvbmZvcm1hbmNlVGVzdEludGVy |
| ZmFjZS5NZXRob2QzIn19LCB7ImVuZCI6IDg2MjUsICJiZWdpbiI6IDg2MTgsICJlZGdlIjogIiUv |
| a3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6 |
| IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxh |
| bmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuQ29uZm9ybWFuY2VUZXN0 |
| SW50ZXJmYWNlLk1ldGhvZDQifX0sIHsiZW5kIjogODc3NSwgImJlZ2luIjogODc2OCwgImVkZ2Ui |
| OiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZu |
| YW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMi |
| LCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5Db25mb3JtYW5j |
| ZVRlc3RJbnRlcmZhY2UuTWV0aG9kNSJ9fSwgeyJlbmQiOiA4OTM0LCAiYmVnaW4iOiA4OTI3LCAi |
| ZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMi |
| LCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVt |
| L3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LkNvbmZv |
| cm1hbmNlVGVzdEludGVyZmFjZS5NZXRob2Q2In19LCB7ImVuZCI6IDkwNzgsICJiZWdpbiI6IDkw |
| NzEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVm |
| aW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hy |
| b21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3Qu |
| Q29uZm9ybWFuY2VUZXN0SW50ZXJmYWNlLk1ldGhvZDcifX0sIHsiZW5kIjogOTI1NywgImJlZ2lu |
| IjogOTI1MCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv |
| cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv |
| bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8u |
| dGVzdC5Db25mb3JtYW5jZVRlc3RJbnRlcmZhY2UuTWV0aG9kOCJ9fSwgeyJlbmQiOiA5NDIxLCAi |
| YmVnaW4iOiA5NDE0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAi |
| YW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3Vy |
| Y2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAi |
| bW9qby50ZXN0LkNvbmZvcm1hbmNlVGVzdEludGVyZmFjZS5NZXRob2Q5In19LCB7ImVuZCI6IDk1 |
| ODksICJiZWdpbiI6IDk1ODEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlw |
| ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2ds |
| ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVy |
| ZSI6ICJtb2pvLnRlc3QuQ29uZm9ybWFuY2VUZXN0SW50ZXJmYWNlLk1ldGhvZDEwIn19LCB7ImVu |
| ZCI6IDk3MzgsICJiZWdpbiI6IDk3MzAsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi |
| LCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVt |
| Lmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNp |
| Z25hdHVyZSI6ICJtb2pvLnRlc3QuQ29uZm9ybWFuY2VUZXN0SW50ZXJmYWNlLk1ldGhvZDExIn19 |
| LCB7ImVuZCI6IDk5MTUsICJiZWdpbiI6IDk5MDcsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5l |
| cmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNo |
| cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9t |
| IiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuQ29uZm9ybWFuY2VUZXN0SW50ZXJmYWNlLk1ldGhv |
| ZDEyIn19LCB7ImVuZCI6IDEwMDUzLCAiYmVnaW4iOiAxMDA0NSwgImVkZ2UiOiAiJS9reXRoZS9l |
| ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw |
| dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui |
| OiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5Db25mb3JtYW5jZVRlc3RJbnRlcmZh |
| Y2UuTWV0aG9kMTMifX0sIHsiZW5kIjogMTAyNTEsICJiZWdpbiI6IDEwMjQzLCAiZWRnZSI6ICIl |
| L2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUi |
| OiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJs |
| YW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LkNvbmZvcm1hbmNlVGVz |
| dEludGVyZmFjZS5NZXRob2QxNCJ9fSwgeyJlbmQiOiAxMDM3NiwgImJlZ2luIjogMTAzNjgsICJl |
| ZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIs |
| ICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0v |
| c3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuQ29uZm9y |
| bWFuY2VUZXN0SW50ZXJmYWNlLk1ldGhvZDE1In19LCB7ImVuZCI6IDEwNTczLCAiYmVnaW4iOiAx |
| MDU2NSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k |
| ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j |
| aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVz |
| dC5Db25mb3JtYW5jZVRlc3RJbnRlcmZhY2UuTWV0aG9kMTYifX0sIHsiZW5kIjogMTA3MzAsICJi |
| ZWdpbiI6IDEwNzIyLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAi |
| YW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3Vy |
| Y2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAi |
| bW9qby50ZXN0LkNvbmZvcm1hbmNlVGVzdEludGVyZmFjZS5NZXRob2QxNyJ9fSwgeyJlbmQiOiAx |
| MDg4MiwgImJlZ2luIjogMTA4NzQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAi |
| dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdv |
| b2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25h |
| dHVyZSI6ICJtb2pvLnRlc3QuQ29uZm9ybWFuY2VUZXN0SW50ZXJmYWNlLk1ldGhvZDE4In19LCB7 |
| ImVuZCI6IDEwOTk3LCAiYmVnaW4iOiAxMDk4OSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVy |
| YXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hy |
| b21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20i |
| LCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5Db25mb3JtYW5jZVRlc3RJbnRlcmZhY2UuTWV0aG9k |
| MTkifX0sIHsiZW5kIjogMTExMTgsICJiZWdpbiI6IDExMTEwLCAiZWRnZSI6ICIlL2t5dGhlL2Vk |
| Z2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1 |
| cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6 |
| ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LkNvbmZvcm1hbmNlVGVzdEludGVyZmFj |
| ZS5NZXRob2QyMCJ9fSwgeyJlbmQiOiAxMTI1OSwgImJlZ2luIjogMTEyNTEsICJlZGdlIjogIiUv |
| a3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6 |
| IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxh |
| bmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuQ29uZm9ybWFuY2VUZXN0 |
| SW50ZXJmYWNlLk1ldGhvZDIxIn19LCB7ImVuZCI6IDExMzg0LCAiYmVnaW4iOiAxMTM3NiwgImVk |
| Z2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwg |
| InZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9z |
| cmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5Db25mb3Jt |
| YW5jZVRlc3RJbnRlcmZhY2UuTWV0aG9kMjIifX0sIHsiZW5kIjogMTE3MDYsICJiZWdpbiI6IDEx |
| NjgyLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl |
| ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No |
| cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0 |
| LkludGVncmF0aW9uVGVzdEludGVyZmFjZSJ9fSwgeyJlbmQiOiAxMzA0NywgImJlZ2luIjogMTMw |
| NDAsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVm |
| aW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hy |
| b21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3Qu |
| SW50ZWdyYXRpb25UZXN0SW50ZXJmYWNlLk1ldGhvZDAifX0sIHsiZW5kIjogMTM3NDQsICJiZWdp |
| biI6IDEzNzM3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5j |
| aG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2Uu |
| Y29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9q |
| by50ZXN0LkJvdW5kc0NoZWNrVGVzdEludGVyZmFjZS5NZXRob2QwIn19LCB7ImVuZCI6IDEzODc0 |
| LCAiYmVnaW4iOiAxMzg2NywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBl |
| IjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xl |
| c291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJl |
| IjogIm1vam8udGVzdC5Cb3VuZHNDaGVja1Rlc3RJbnRlcmZhY2UuTWV0aG9kMSJ9fSwgeyJlbmQi |
| OiAxNDMyNCwgImJlZ2luIjogMTQzMTcsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi |
| LCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVt |
| Lmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNp |
| Z25hdHVyZSI6ICJtb2pvLnRlc3QuQ29uZm9ybWFuY2VUZXN0SW50ZXJmYWNlLk1ldGhvZDAifX0s |
| IHsiZW5kIjogMTQ0MjYsICJiZWdpbiI6IDE0NDE5LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2Vu |
| ZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJj |
| aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pv |
| bSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LkNvbmZvcm1hbmNlVGVzdEludGVyZmFjZS5NZXRo |
| b2QxIn19LCB7ImVuZCI6IDE0NTMzLCAiYmVnaW4iOiAxNDUyNiwgImVkZ2UiOiAiJS9reXRoZS9l |
| ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw |
| dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui |
| OiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5Db25mb3JtYW5jZVRlc3RJbnRlcmZh |
| Y2UuTWV0aG9kMiJ9fSwgeyJlbmQiOiAxNDY1OSwgImJlZ2luIjogMTQ2NTIsICJlZGdlIjogIiUv |
| a3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6 |
| IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxh |
| bmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuQ29uZm9ybWFuY2VUZXN0 |
| SW50ZXJmYWNlLk1ldGhvZDMifX0sIHsiZW5kIjogMTQ3ODAsICJiZWdpbiI6IDE0NzczLCAiZWRn |
| ZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAi |
| dm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3Ny |
| YyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LkNvbmZvcm1h |
| bmNlVGVzdEludGVyZmFjZS5NZXRob2Q0In19LCB7ImVuZCI6IDE0OTIzLCAiYmVnaW4iOiAxNDkx |
| NiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZp |
| bmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJv |
| bWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5D |
| b25mb3JtYW5jZVRlc3RJbnRlcmZhY2UuTWV0aG9kNSJ9fSwgeyJlbmQiOiAxNTA3NSwgImJlZ2lu |
| IjogMTUwNjgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo |
| b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j |
| b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pv |
| LnRlc3QuQ29uZm9ybWFuY2VUZXN0SW50ZXJmYWNlLk1ldGhvZDYifX0sIHsiZW5kIjogMTUyMTIs |
| ICJiZWdpbiI6IDE1MjA1LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUi |
| OiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVz |
| b3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUi |
| OiAibW9qby50ZXN0LkNvbmZvcm1hbmNlVGVzdEludGVyZmFjZS5NZXRob2Q3In19LCB7ImVuZCI6 |
| IDE1Mzg0LCAiYmVnaW4iOiAxNTM3NywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs |
| ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u |
| Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln |
| bmF0dXJlIjogIm1vam8udGVzdC5Db25mb3JtYW5jZVRlc3RJbnRlcmZhY2UuTWV0aG9kOCJ9fSwg |
| eyJlbmQiOiAxNTU0MSwgImJlZ2luIjogMTU1MzQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5l |
| cmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNo |
| cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9t |
| IiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuQ29uZm9ybWFuY2VUZXN0SW50ZXJmYWNlLk1ldGhv |
| ZDkifX0sIHsiZW5kIjogMTU3MDIsICJiZWdpbiI6IDE1Njk0LCAiZWRnZSI6ICIlL2t5dGhlL2Vk |
| Z2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1 |
| cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6 |
| ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LkNvbmZvcm1hbmNlVGVzdEludGVyZmFj |
| ZS5NZXRob2QxMCJ9fSwgeyJlbmQiOiAxNTg0NCwgImJlZ2luIjogMTU4MzYsICJlZGdlIjogIiUv |
| a3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6 |
| IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxh |
| bmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuQ29uZm9ybWFuY2VUZXN0 |
| SW50ZXJmYWNlLk1ldGhvZDExIn19LCB7ImVuZCI6IDE1OTUzLCAiYmVnaW4iOiAxNTk0NSwgImVk |
| Z2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwg |
| InZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9z |
| cmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5Db25mb3Jt |
| YW5jZVRlc3RJbnRlcmZhY2UuTWV0aG9kMTIifX0sIHsiZW5kIjogMTYwODQsICJiZWdpbiI6IDE2 |
| MDc2LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl |
| ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No |
| cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0 |
| LkNvbmZvcm1hbmNlVGVzdEludGVyZmFjZS5NZXRob2QxMyJ9fSwgeyJlbmQiOiAxNjI3NSwgImJl |
| Z2luIjogMTYyNjcsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJh |
| bmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJj |
| ZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJt |
| b2pvLnRlc3QuQ29uZm9ybWFuY2VUZXN0SW50ZXJmYWNlLk1ldGhvZDE0In19LCB7ImVuZCI6IDE2 |
| MzkzLCAiYmVnaW4iOiAxNjM4NSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0 |
| eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29v |
| Z2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0 |
| dXJlIjogIm1vam8udGVzdC5Db25mb3JtYW5jZVRlc3RJbnRlcmZhY2UuTWV0aG9kMTUifX0sIHsi |
| ZW5kIjogMTY1ODMsICJiZWdpbiI6IDE2NTc1LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh |
| dGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJv |
| bWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIs |
| ICJzaWduYXR1cmUiOiAibW9qby50ZXN0LkNvbmZvcm1hbmNlVGVzdEludGVyZmFjZS5NZXRob2Qx |
| NiJ9fSwgeyJlbmQiOiAxNjczMywgImJlZ2luIjogMTY3MjUsICJlZGdlIjogIiUva3l0aGUvZWRn |
| ZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVz |
| IjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjog |
| Im1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuQ29uZm9ybWFuY2VUZXN0SW50ZXJmYWNl |
| Lk1ldGhvZDE3In19LCB7ImVuZCI6IDE2ODc4LCAiYmVnaW4iOiAxNjg3MCwgImVkZ2UiOiAiJS9r |
| eXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjog |
| eyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFu |
| Z3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5Db25mb3JtYW5jZVRlc3RJ |
| bnRlcmZhY2UuTWV0aG9kMTgifX0sIHsiZW5kIjogMTY5ODYsICJiZWdpbiI6IDE2OTc4LCAiZWRn |
| ZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAi |
| dm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3Ny |
| YyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LkNvbmZvcm1h |
| bmNlVGVzdEludGVyZmFjZS5NZXRob2QxOSJ9fSwgeyJlbmQiOiAxNzEwMCwgImJlZ2luIjogMTcw |
| OTIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVm |
| aW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hy |
| b21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3Qu |
| Q29uZm9ybWFuY2VUZXN0SW50ZXJmYWNlLk1ldGhvZDIwIn19LCB7ImVuZCI6IDE3MjM0LCAiYmVn |
| aW4iOiAxNzIyNiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFu |
| Y2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNl |
| LmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1v |
| am8udGVzdC5Db25mb3JtYW5jZVRlc3RJbnRlcmZhY2UuTWV0aG9kMjEifX0sIHsiZW5kIjogMTcz |
| NTIsICJiZWdpbiI6IDE3MzQ0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5 |
| cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29n |
| bGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1 |
| cmUiOiAibW9qby50ZXN0LkNvbmZvcm1hbmNlVGVzdEludGVyZmFjZS5NZXRob2QyMiJ9fSwgeyJl |
| bmQiOiAxNzgwNCwgImJlZ2luIjogMTc3OTcsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0 |
| ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9t |
| aXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwg |
| InNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuSW50ZWdyYXRpb25UZXN0SW50ZXJmYWNlLk1ldGhvZDAi |
| fX0sIHsiZW5kIjogMjQ0MDMsICJiZWdpbiI6IDI0Mzk2LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2Uv |
| Z2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6 |
| ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJt |
| b2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlN0cnVjdEEifX0sIHsiZW5kIjogMjc4OTEs |
| ICJiZWdpbiI6IDI3ODkwLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUi |
| OiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVz |
| b3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUi |
| OiAibW9qby50ZXN0LlN0cnVjdEEuaSJ9fSwgeyJlbmQiOiAyODkwNCwgImJlZ2luIjogMjg4OTMs |
| ICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5l |
| cyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21p |
| dW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuQmFz |
| aWNTdHJ1Y3QifX0sIHsiZW5kIjogMzI0OTAsICJiZWdpbiI6IDMyNDg5LCAiZWRnZSI6ICIlL2t5 |
| dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7 |
| ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5n |
| dWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LkJhc2ljU3RydWN0LmEifX0s |
| IHsiZW5kIjogMzM1MTksICJiZWdpbiI6IDMzNTA1LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2Vu |
| ZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJj |
| aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pv |
| bSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlN0cnVjdFdpdGhFbnVtIn19LCB7ImVuZCI6IDMz |
| ODAwLCAiYmVnaW4iOiAzMzc5MCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0 |
| eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29v |
| Z2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0 |
| dXJlIjogIm1vam8udGVzdC5TdHJ1Y3RXaXRoRW51bS5FbnVtV2l0aGluIn19LCB7ImVuZCI6IDM4 |
| MjAxLCAiYmVnaW4iOiAzODE5NSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0 |
| eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29v |
| Z2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0 |
| dXJlIjogIm1vam8udGVzdC5VbmlvbkEifX0sIHsiZW5kIjogNDAzNDEsICJiZWdpbiI6IDQwMzMw |
| LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmlu |
| ZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9t |
| aXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlVu |
| aW9uQS5zdHJ1Y3RfYSJ9fSwgeyJlbmQiOiA0MDQ2MCwgImJlZ2luIjogNDA0NDgsICJlZGdlIjog |
| IiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFt |
| ZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwg |
| Imxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVW5pb25BLnN0cnVj |
| dF9hIn19LCB7ImVuZCI6IDQwNjA4LCAiYmVnaW4iOiA0MDU5NiwgImVkZ2UiOiAiJS9reXRoZS9l |
| ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw |
| dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui |
| OiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5VbmlvbkEuc3RydWN0X2EifX0sIHsi |
| ZW5kIjogNDA2OTEsICJiZWdpbiI6IDQwNjg3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh |
| dGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJv |
| bWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIs |
| ICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlVuaW9uQS5iIn19LCB7ImVuZCI6IDQwNzgzLCAiYmVn |
| aW4iOiA0MDc3OCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFu |
| Y2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNl |
| LmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1v |
| am8udGVzdC5VbmlvbkEuYiJ9fSwgeyJlbmQiOiA0MDkwMSwgImJlZ2luIjogNDA4OTYsICJlZGdl |
| IjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2 |
| bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3Jj |
| IiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVW5pb25BLmIi |
| fX0sIHsiZW5kIjogNDE3NDYsICJiZWdpbiI6IDQxNzM5LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2Uv |
| Z2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6 |
| ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJt |
| b2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlN0cnVjdEIifX0sIHsiZW5kIjogNDUzMzgs |
| ICJiZWdpbiI6IDQ1MzMwLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUi |
| OiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVz |
| b3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUi |
| OiAibW9qby50ZXN0LlN0cnVjdEIuc3RydWN0X2EifX0sIHsiZW5kIjogNDYzMzcsICJiZWdpbiI6 |
| IDQ2MzMwLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9y |
| X2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t |
| L2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50 |
| ZXN0LlN0cnVjdEMifX0sIHsiZW5kIjogNDk4MjQsICJiZWdpbiI6IDQ5ODIwLCAiZWRnZSI6ICIl |
| L2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUi |
| OiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJs |
| YW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlN0cnVjdEMuZGF0YSJ9 |
| fSwgeyJlbmQiOiA1MDgyMywgImJlZ2luIjogNTA4MTYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9n |
| ZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjog |
| ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1v |
| am9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuU3RydWN0RCJ9fSwgeyJlbmQiOiA1NDI3MSwg |
| ImJlZ2luIjogNTQyNTgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6 |
| ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv |
| dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6 |
| ICJtb2pvLnRlc3QuU3RydWN0RC5tZXNzYWdlX3BpcGVzIn19LCB7ImVuZCI6IDU1MjcwLCAiYmVn |
| aW4iOiA1NTI2MywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFu |
| Y2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNl |
| LmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1v |
| am8udGVzdC5TdHJ1Y3RFIn19LCB7ImVuZCI6IDU4Njg5LCAiYmVnaW4iOiA1ODY4MSwgImVkZ2Ui |
| OiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZu |
| YW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMi |
| LCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5TdHJ1Y3RFLnN0 |
| cnVjdF9kIn19LCB7ImVuZCI6IDU4ODA4LCAiYmVnaW4iOiA1ODc5MCwgImVkZ2UiOiAiJS9reXRo |
| ZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJj |
| b3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3Vh |
| Z2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5TdHJ1Y3RFLmRhdGFfcGlwZV9j |
| b25zdW1lciJ9fSwgeyJlbmQiOiA1OTgwNywgImJlZ2luIjogNTk4MDAsICJlZGdlIjogIiUva3l0 |
| aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsi |
| Y29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1 |
| YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuU3RydWN0RiJ9fSwgeyJlbmQi |
| OiA2MzMzMCwgImJlZ2luIjogNjMzMTQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi |
| LCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVt |
| Lmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNp |
| Z25hdHVyZSI6ICJtb2pvLnRlc3QuU3RydWN0Ri5maXhlZF9zaXplX2FycmF5In19LCB7ImVuZCI6 |
| IDY0MzI5LCAiYmVnaW4iOiA2NDMyMiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs |
| ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u |
| Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln |
| bmF0dXJlIjogIm1vam8udGVzdC5TdHJ1Y3RHIn19LCB7ImVuZCI6IDY4MDM0LCAiYmVnaW4iOiA2 |
| ODAzMywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k |
| ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j |
| aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVz |
| dC5TdHJ1Y3RHLmkifX0sIHsiZW5kIjogNjgxMDcsICJiZWdpbiI6IDY4MDk5LCAiZWRnZSI6ICIl |
| L2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUi |
| OiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJs |
| YW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlN0cnVjdEcuc3RydWN0 |
| X2EifX0sIHsiZW5kIjogNjgxODcsICJiZWdpbiI6IDY4MTg0LCAiZWRnZSI6ICIlL2t5dGhlL2Vk |
| Z2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1 |
| cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6 |
| ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlN0cnVjdEcuc3RyIn19LCB7ImVuZCI6 |
| IDY4MjQwLCAiYmVnaW4iOiA2ODIzOSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs |
| ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u |
| Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln |
| bmF0dXJlIjogIm1vam8udGVzdC5TdHJ1Y3RHLmIifX0sIHsiZW5kIjogNjkyNDUsICJiZWdpbiI6 |
| IDY5MjM2LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9y |
| X2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t |
| L2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50 |
| ZXN0LlJlY3Vyc2l2ZSJ9fSwgeyJlbmQiOiA3Mjg1OCwgImJlZ2luIjogNzI4NDYsICJlZGdlIjog |
| IiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFt |
| ZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwg |
| Imxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuUmVjdXJzaXZlLnJl |
| Y3Vyc2l2ZSJ9fV0sICJ0eXBlIjogImt5dGhlMCJ9 |
| */ |