blob: 283413d68480789c54d887102cb058b246ec8adb [file] [log] [blame]
// mojo/public/interfaces/bindings/tests/test_wtf_types.mojom-shared.h is auto generated by mojom_bindings_generator.py, do not edit
// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef MOJO_PUBLIC_INTERFACES_BINDINGS_TESTS_TEST_WTF_TYPES_MOJOM_SHARED_H_
#define MOJO_PUBLIC_INTERFACES_BINDINGS_TESTS_TEST_WTF_TYPES_MOJOM_SHARED_H_
#include <stdint.h>
#include <functional>
#include <iosfwd>
#include <type_traits>
#include <utility>
#include "mojo/public/cpp/bindings/array_data_view.h"
#include "mojo/public/cpp/bindings/enum_traits.h"
#include "mojo/public/cpp/bindings/interface_data_view.h"
#include "mojo/public/cpp/bindings/lib/bindings_internal.h"
#include "mojo/public/cpp/bindings/lib/serialization.h"
#include "mojo/public/cpp/bindings/map_data_view.h"
#include "mojo/public/cpp/bindings/string_data_view.h"
#include "third_party/perfetto/include/perfetto/tracing/traced_value_forward.h"
#include "mojo/public/interfaces/bindings/tests/test_wtf_types.mojom-shared-internal.h"
#include "mojo/public/cpp/bindings/lib/interface_serialization.h"
#include "mojo/public/cpp/system/data_pipe.h"
#ifdef KYTHE_IS_RUNNING
#pragma kythe_inline_metadata "Metadata comment"
#endif
namespace mojo::test {
class TestWTFCodeGenerationDataView;
class TestWTFStructDataView;
class TestWTFStructWrapperDataView;
class TestWTFCodeGeneration2DataView;
} // mojo::test
namespace mojo {
namespace internal {
template <>
struct MojomTypeTraits<::mojo::test::TestWTFCodeGenerationDataView> {
using Data = ::mojo::test::internal::TestWTFCodeGeneration_Data;
using DataAsArrayElement = Pointer<Data>;
static constexpr MojomTypeCategory category = MojomTypeCategory::kStruct;
};
template <>
struct MojomTypeTraits<::mojo::test::TestWTFStructDataView> {
using Data = ::mojo::test::internal::TestWTFStruct_Data;
using DataAsArrayElement = Pointer<Data>;
static constexpr MojomTypeCategory category = MojomTypeCategory::kStruct;
};
template <>
struct MojomTypeTraits<::mojo::test::TestWTFStructWrapperDataView> {
using Data = ::mojo::test::internal::TestWTFStructWrapper_Data;
using DataAsArrayElement = Pointer<Data>;
static constexpr MojomTypeCategory category = MojomTypeCategory::kStruct;
};
template <>
struct MojomTypeTraits<::mojo::test::TestWTFCodeGeneration2DataView> {
using Data = ::mojo::test::internal::TestWTFCodeGeneration2_Data;
using DataAsArrayElement = Data;
static constexpr MojomTypeCategory category = MojomTypeCategory::kUnion;
};
} // namespace internal
} // namespace mojo
namespace mojo::test {
// @generated_from: mojo.test.TopLevelEnum
enum class TopLevelEnum : int32_t {
// @generated_from: mojo.test.TopLevelEnum.E0
E0 = 0,
// @generated_from: mojo.test.TopLevelEnum.E1
E1 = 1,
kMinValue = 0,
kMaxValue = 1,
};
std::ostream& operator<<(std::ostream& os, TopLevelEnum value);
inline bool IsKnownEnumValue(TopLevelEnum value) {
return internal::TopLevelEnum_Data::IsKnownValue(
static_cast<int32_t>(value));
}
// @generated_from: mojo.test.TestWTFStruct.NestedEnum
enum class TestWTFStruct_NestedEnum : int32_t {
// @generated_from: mojo.test.TestWTFStruct.NestedEnum.E0
E0 = 0,
// @generated_from: mojo.test.TestWTFStruct.NestedEnum.E1
E1 = 1,
kMinValue = 0,
kMaxValue = 1,
};
std::ostream& operator<<(std::ostream& os, TestWTFStruct_NestedEnum value);
inline bool IsKnownEnumValue(TestWTFStruct_NestedEnum value) {
return internal::TestWTFStruct_NestedEnum_Data::IsKnownValue(
static_cast<int32_t>(value));
}
// @generated_from: mojo.test.TestWTF.NestedEnum
enum class TestWTF_NestedEnum : int32_t {
// @generated_from: mojo.test.TestWTF.NestedEnum.E0
E0 = 0,
// @generated_from: mojo.test.TestWTF.NestedEnum.E1
E1 = 1,
kMinValue = 0,
kMaxValue = 1,
};
std::ostream& operator<<(std::ostream& os, TestWTF_NestedEnum value);
inline bool IsKnownEnumValue(TestWTF_NestedEnum value) {
return internal::TestWTF_NestedEnum_Data::IsKnownValue(
static_cast<int32_t>(value));
}
// Interface base classes. They are used for type safety check.
class TestWTFInterfaceBase {};
using TestWTFPtrDataView =
mojo::InterfacePtrDataView<TestWTFInterfaceBase>;
using TestWTFRequestDataView =
mojo::InterfaceRequestDataView<TestWTFInterfaceBase>;
using TestWTFAssociatedPtrInfoDataView =
mojo::AssociatedInterfacePtrInfoDataView<TestWTFInterfaceBase>;
using TestWTFAssociatedRequestDataView =
mojo::AssociatedInterfaceRequestDataView<TestWTFInterfaceBase>;
class TestWTFCodeGenerationDataView {
public:
TestWTFCodeGenerationDataView() = default;
TestWTFCodeGenerationDataView(
internal::TestWTFCodeGeneration_Data* data,
mojo::Message* message)
: data_(data), message_(message) {}
bool is_null() const { return !data_; }
inline void GetStrDataView(
mojo::StringDataView* output);
template <typename UserType>
[[nodiscard]] bool ReadStr(UserType* output) {
auto* pointer = data_->str.Get();
return mojo::internal::Deserialize<mojo::StringDataView>(
pointer, output, message_);
}
inline void GetNullableStrDataView(
mojo::StringDataView* output);
template <typename UserType>
[[nodiscard]] bool ReadNullableStr(UserType* output) {
static_assert(
mojo::internal::IsValidUserTypeForOptionalValue<
mojo::StringDataView, UserType>(),
"Attempting to read the optional `nullable_str` field into a type which "
"cannot represent a null value. Either wrap the destination object "
"with std::optional, ensure that any corresponding "
"{Struct/Union/Array/String}Traits define the necessary IsNull and "
"SetToNull methods, or use `MaybeReadNullableStr` instead "
"of `ReadNullableStr if you're fine with null values being "
"silently ignored in this case.");
auto* pointer = data_->nullable_str.Get();
return mojo::internal::Deserialize<mojo::StringDataView>(
pointer, output, message_);
}
inline void GetStrsDataView(
mojo::ArrayDataView<mojo::StringDataView>* output);
template <typename UserType>
[[nodiscard]] bool ReadStrs(UserType* output) {
auto* pointer = data_->strs.Get();
return mojo::internal::Deserialize<mojo::ArrayDataView<mojo::StringDataView>>(
pointer, output, message_);
}
inline void GetNullableStrsDataView(
mojo::ArrayDataView<mojo::StringDataView>* output);
template <typename UserType>
[[nodiscard]] bool ReadNullableStrs(UserType* output) {
auto* pointer = data_->nullable_strs.Get();
return mojo::internal::Deserialize<mojo::ArrayDataView<mojo::StringDataView>>(
pointer, output, message_);
}
inline void GetArraysDataView(
mojo::ArrayDataView<mojo::ArrayDataView<int32_t>>* output);
template <typename UserType>
[[nodiscard]] bool ReadArrays(UserType* output) {
auto* pointer = data_->arrays.Get();
return mojo::internal::Deserialize<mojo::ArrayDataView<mojo::ArrayDataView<int32_t>>>(
pointer, output, message_);
}
inline void GetBoolsDataView(
mojo::ArrayDataView<bool>* output);
template <typename UserType>
[[nodiscard]] bool ReadBools(UserType* output) {
auto* pointer = data_->bools.Get();
return mojo::internal::Deserialize<mojo::ArrayDataView<bool>>(
pointer, output, message_);
}
inline void GetHandlesDataView(
mojo::ArrayDataView<mojo::ScopedMessagePipeHandle>* output);
template <typename UserType>
[[nodiscard]] bool ReadHandles(UserType* output) {
auto* pointer = data_->handles.Get();
return mojo::internal::Deserialize<mojo::ArrayDataView<mojo::ScopedMessagePipeHandle>>(
pointer, output, message_);
}
inline void GetStrMapDataView(
mojo::MapDataView<mojo::StringDataView, mojo::StringDataView>* output);
template <typename UserType>
[[nodiscard]] bool ReadStrMap(UserType* output) {
auto* pointer = data_->str_map.Get();
return mojo::internal::Deserialize<mojo::MapDataView<mojo::StringDataView, mojo::StringDataView>>(
pointer, output, message_);
}
inline void GetArrayMapDataView(
mojo::MapDataView<int32_t, mojo::ArrayDataView<int32_t>>* output);
template <typename UserType>
[[nodiscard]] bool ReadArrayMap(UserType* output) {
auto* pointer = data_->array_map.Get();
return mojo::internal::Deserialize<mojo::MapDataView<int32_t, mojo::ArrayDataView<int32_t>>>(
pointer, output, message_);
}
inline void GetHandleMapDataView(
mojo::MapDataView<int32_t, mojo::ScopedMessagePipeHandle>* output);
template <typename UserType>
[[nodiscard]] bool ReadHandleMap(UserType* output) {
auto* pointer = data_->handle_map.Get();
return mojo::internal::Deserialize<mojo::MapDataView<int32_t, mojo::ScopedMessagePipeHandle>>(
pointer, output, message_);
}
inline void GetStrMapsDataView(
mojo::ArrayDataView<mojo::MapDataView<mojo::StringDataView, mojo::StringDataView>>* output);
template <typename UserType>
[[nodiscard]] bool ReadStrMaps(UserType* output) {
auto* pointer = data_->str_maps.Get();
return mojo::internal::Deserialize<mojo::ArrayDataView<mojo::MapDataView<mojo::StringDataView, mojo::StringDataView>>>(
pointer, output, message_);
}
private:
internal::TestWTFCodeGeneration_Data* data_ = nullptr;
mojo::Message* message_ = nullptr;
};
class TestWTFStructDataView {
public:
TestWTFStructDataView() = default;
TestWTFStructDataView(
internal::TestWTFStruct_Data* data,
mojo::Message* message)
: data_(data), message_(message) {}
bool is_null() const { return !data_; }
inline void GetStrDataView(
mojo::StringDataView* output);
template <typename UserType>
[[nodiscard]] bool ReadStr(UserType* output) {
auto* pointer = data_->str.Get();
return mojo::internal::Deserialize<mojo::StringDataView>(
pointer, output, message_);
}
int32_t integer() const {
return data_->integer;
}
private:
internal::TestWTFStruct_Data* data_ = nullptr;
mojo::Message* message_ = nullptr;
};
class TestWTFStructWrapperDataView {
public:
TestWTFStructWrapperDataView() = default;
TestWTFStructWrapperDataView(
internal::TestWTFStructWrapper_Data* data,
mojo::Message* message)
: data_(data), message_(message) {}
bool is_null() const { return !data_; }
inline void GetNestedStructDataView(
TestWTFStructDataView* output);
template <typename UserType>
[[nodiscard]] bool ReadNestedStruct(UserType* output) {
auto* pointer = data_->nested_struct.Get();
return mojo::internal::Deserialize<::mojo::test::TestWTFStructDataView>(
pointer, output, message_);
}
inline void GetArrayStructDataView(
mojo::ArrayDataView<TestWTFStructDataView>* output);
template <typename UserType>
[[nodiscard]] bool ReadArrayStruct(UserType* output) {
auto* pointer = data_->array_struct.Get();
return mojo::internal::Deserialize<mojo::ArrayDataView<::mojo::test::TestWTFStructDataView>>(
pointer, output, message_);
}
inline void GetMapStructDataView(
mojo::MapDataView<TestWTFStructDataView, TestWTFStructDataView>* output);
template <typename UserType>
[[nodiscard]] bool ReadMapStruct(UserType* output) {
auto* pointer = data_->map_struct.Get();
return mojo::internal::Deserialize<mojo::MapDataView<::mojo::test::TestWTFStructDataView, ::mojo::test::TestWTFStructDataView>>(
pointer, output, message_);
}
private:
internal::TestWTFStructWrapper_Data* data_ = nullptr;
mojo::Message* message_ = nullptr;
};
class TestWTFCodeGeneration2DataView {
public:
using Tag = internal::TestWTFCodeGeneration2_Data::TestWTFCodeGeneration2_Tag;
TestWTFCodeGeneration2DataView() = default;
TestWTFCodeGeneration2DataView(
internal::TestWTFCodeGeneration2_Data* data,
mojo::Message* message)
: data_(data), message_(message) {}
bool is_null() const {
// For inlined unions, |data_| is always non-null. In that case we need to
// check |data_->is_null()|.
return !data_ || data_->is_null();
}
Tag tag() const { return data_->tag; }
bool is_str() const { return data_->tag == Tag::kStr; }
inline void GetStrDataView(
mojo::StringDataView* output) const;
template <typename UserType>
[[nodiscard]] bool ReadStr(UserType* output) const {
CHECK(is_str());
return mojo::internal::Deserialize<mojo::StringDataView>(
data_->data.f_str.Get(), output, message_);
}
bool is_strs() const { return data_->tag == Tag::kStrs; }
inline void GetStrsDataView(
mojo::ArrayDataView<mojo::StringDataView>* output) const;
template <typename UserType>
[[nodiscard]] bool ReadStrs(UserType* output) const {
CHECK(is_strs());
return mojo::internal::Deserialize<mojo::ArrayDataView<mojo::StringDataView>>(
data_->data.f_strs.Get(), output, message_);
}
bool is_str_map() const { return data_->tag == Tag::kStrMap; }
inline void GetStrMapDataView(
mojo::MapDataView<mojo::StringDataView, mojo::StringDataView>* output) const;
template <typename UserType>
[[nodiscard]] bool ReadStrMap(UserType* output) const {
CHECK(is_str_map());
return mojo::internal::Deserialize<mojo::MapDataView<mojo::StringDataView, mojo::StringDataView>>(
data_->data.f_str_map.Get(), output, message_);
}
private:
internal::TestWTFCodeGeneration2_Data* data_ = nullptr;
mojo::Message* message_ = nullptr;
};
} // mojo::test
namespace std {
template <>
struct hash<::mojo::test::TopLevelEnum>
: public mojo::internal::EnumHashImpl<::mojo::test::TopLevelEnum> {};
template <>
struct hash<::mojo::test::TestWTFStruct_NestedEnum>
: public mojo::internal::EnumHashImpl<::mojo::test::TestWTFStruct_NestedEnum> {};
template <>
struct hash<::mojo::test::TestWTF_NestedEnum>
: public mojo::internal::EnumHashImpl<::mojo::test::TestWTF_NestedEnum> {};
} // namespace std
namespace mojo {
namespace internal {
template <typename MaybeConstUserType>
struct Serializer<::mojo::test::TopLevelEnum, MaybeConstUserType> {
using UserType = typename std::remove_const<MaybeConstUserType>::type;
using Traits = EnumTraits<::mojo::test::TopLevelEnum, UserType>;
static void Serialize(UserType input, int32_t* output) {
*output = static_cast<int32_t>(Traits::ToMojom(input));
}
static bool Deserialize(int32_t input, UserType* output) {
return Traits::FromMojom(::mojo::internal::ToKnownEnumValueHelper(
static_cast<::mojo::test::TopLevelEnum>(input)), output);
}
};
} // namespace internal
namespace internal {
template <typename MaybeConstUserType>
struct Serializer<::mojo::test::TestWTFStruct_NestedEnum, MaybeConstUserType> {
using UserType = typename std::remove_const<MaybeConstUserType>::type;
using Traits = EnumTraits<::mojo::test::TestWTFStruct_NestedEnum, UserType>;
static void Serialize(UserType input, int32_t* output) {
*output = static_cast<int32_t>(Traits::ToMojom(input));
}
static bool Deserialize(int32_t input, UserType* output) {
return Traits::FromMojom(::mojo::internal::ToKnownEnumValueHelper(
static_cast<::mojo::test::TestWTFStruct_NestedEnum>(input)), output);
}
};
} // namespace internal
namespace internal {
template <typename MaybeConstUserType>
struct Serializer<::mojo::test::TestWTF_NestedEnum, MaybeConstUserType> {
using UserType = typename std::remove_const<MaybeConstUserType>::type;
using Traits = EnumTraits<::mojo::test::TestWTF_NestedEnum, UserType>;
static void Serialize(UserType input, int32_t* output) {
*output = static_cast<int32_t>(Traits::ToMojom(input));
}
static bool Deserialize(int32_t input, UserType* output) {
return Traits::FromMojom(::mojo::internal::ToKnownEnumValueHelper(
static_cast<::mojo::test::TestWTF_NestedEnum>(input)), output);
}
};
} // namespace internal
namespace internal {
template <typename MaybeConstUserType>
struct Serializer<::mojo::test::TestWTFCodeGenerationDataView, MaybeConstUserType> {
using UserType = typename std::remove_const<MaybeConstUserType>::type;
using Traits = StructTraits<::mojo::test::TestWTFCodeGenerationDataView, UserType>;
static void Serialize(
MaybeConstUserType& input,
mojo::internal::MessageFragment<::mojo::test::internal::TestWTFCodeGeneration_Data>& fragment) {
if (CallIsNullIfExists<Traits>(input))
return;
fragment.Allocate();
decltype(Traits::str(input)) in_str = Traits::str(input);
mojo::internal::MessageFragment<
typename decltype(fragment->str)::BaseType> str_fragment(
fragment.message());
mojo::internal::Serialize<mojo::StringDataView>(
in_str, str_fragment);
fragment->str.Set(
str_fragment.is_null() ? nullptr : str_fragment.data());
MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
fragment->str.is_null(),
mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
"null str in TestWTFCodeGeneration struct");
decltype(Traits::nullable_str(input)) in_nullable_str = Traits::nullable_str(input);
mojo::internal::MessageFragment<
typename decltype(fragment->nullable_str)::BaseType> nullable_str_fragment(
fragment.message());
mojo::internal::Serialize<mojo::StringDataView>(
in_nullable_str, nullable_str_fragment);
fragment->nullable_str.Set(
nullable_str_fragment.is_null() ? nullptr : nullable_str_fragment.data());
decltype(Traits::strs(input)) in_strs = Traits::strs(input);
mojo::internal::MessageFragment<
typename decltype(fragment->strs)::BaseType>
strs_fragment(fragment.message());
constexpr const mojo::internal::ContainerValidateParams& strs_validate_params =
mojo::internal::GetArrayValidator<0, false, &mojo::internal::GetArrayValidator<0, false, nullptr>()>();
mojo::internal::Serialize<mojo::ArrayDataView<mojo::StringDataView>>(
in_strs, strs_fragment, &strs_validate_params);
fragment->strs.Set(
strs_fragment.is_null() ? nullptr : strs_fragment.data());
MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
fragment->strs.is_null(),
mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
"null strs in TestWTFCodeGeneration struct");
decltype(Traits::nullable_strs(input)) in_nullable_strs = Traits::nullable_strs(input);
mojo::internal::MessageFragment<
typename decltype(fragment->nullable_strs)::BaseType>
nullable_strs_fragment(fragment.message());
constexpr const mojo::internal::ContainerValidateParams& nullable_strs_validate_params =
mojo::internal::GetArrayValidator<0, true, &mojo::internal::GetArrayValidator<0, false, nullptr>()>();
mojo::internal::Serialize<mojo::ArrayDataView<mojo::StringDataView>>(
in_nullable_strs, nullable_strs_fragment, &nullable_strs_validate_params);
fragment->nullable_strs.Set(
nullable_strs_fragment.is_null() ? nullptr : nullable_strs_fragment.data());
MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
fragment->nullable_strs.is_null(),
mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
"null nullable_strs in TestWTFCodeGeneration struct");
decltype(Traits::arrays(input)) in_arrays = Traits::arrays(input);
mojo::internal::MessageFragment<
typename decltype(fragment->arrays)::BaseType>
arrays_fragment(fragment.message());
constexpr const mojo::internal::ContainerValidateParams& arrays_validate_params =
mojo::internal::GetArrayValidator<0, false, &mojo::internal::GetArrayValidator<0, false, nullptr>()>();
mojo::internal::Serialize<mojo::ArrayDataView<mojo::ArrayDataView<int32_t>>>(
in_arrays, arrays_fragment, &arrays_validate_params);
fragment->arrays.Set(
arrays_fragment.is_null() ? nullptr : arrays_fragment.data());
MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
fragment->arrays.is_null(),
mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
"null arrays in TestWTFCodeGeneration struct");
decltype(Traits::bools(input)) in_bools = Traits::bools(input);
mojo::internal::MessageFragment<
typename decltype(fragment->bools)::BaseType>
bools_fragment(fragment.message());
constexpr const mojo::internal::ContainerValidateParams& bools_validate_params =
mojo::internal::GetArrayValidator<0, false, nullptr>();
mojo::internal::Serialize<mojo::ArrayDataView<bool>>(
in_bools, bools_fragment, &bools_validate_params);
fragment->bools.Set(
bools_fragment.is_null() ? nullptr : bools_fragment.data());
MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
fragment->bools.is_null(),
mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
"null bools in TestWTFCodeGeneration struct");
decltype(Traits::handles(input)) in_handles = Traits::handles(input);
mojo::internal::MessageFragment<
typename decltype(fragment->handles)::BaseType>
handles_fragment(fragment.message());
constexpr const mojo::internal::ContainerValidateParams& handles_validate_params =
mojo::internal::GetArrayValidator<0, false, nullptr>();
mojo::internal::Serialize<mojo::ArrayDataView<mojo::ScopedMessagePipeHandle>>(
in_handles, handles_fragment, &handles_validate_params);
fragment->handles.Set(
handles_fragment.is_null() ? nullptr : handles_fragment.data());
MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
fragment->handles.is_null(),
mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
"null handles in TestWTFCodeGeneration struct");
decltype(Traits::str_map(input)) in_str_map = Traits::str_map(input);
mojo::internal::MessageFragment<
typename decltype(fragment->str_map)::BaseType>
str_map_fragment(fragment.message());
constexpr const mojo::internal::ContainerValidateParams& str_map_validate_params =
mojo::internal::GetMapValidator<*&mojo::internal::GetArrayValidator<0, false, &mojo::internal::GetArrayValidator<0, false, nullptr>()>(), *&mojo::internal::GetArrayValidator<0, true, &mojo::internal::GetArrayValidator<0, false, nullptr>()>()>();
mojo::internal::Serialize<mojo::MapDataView<mojo::StringDataView, mojo::StringDataView>>(
in_str_map, str_map_fragment, &str_map_validate_params);
fragment->str_map.Set(
str_map_fragment.is_null() ? nullptr : str_map_fragment.data());
MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
fragment->str_map.is_null(),
mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
"null str_map in TestWTFCodeGeneration struct");
decltype(Traits::array_map(input)) in_array_map = Traits::array_map(input);
mojo::internal::MessageFragment<
typename decltype(fragment->array_map)::BaseType>
array_map_fragment(fragment.message());
constexpr const mojo::internal::ContainerValidateParams& array_map_validate_params =
mojo::internal::GetMapValidator<*&mojo::internal::GetArrayValidator<0, false, nullptr>(), *&mojo::internal::GetArrayValidator<0, false, &mojo::internal::GetArrayValidator<0, false, nullptr>()>()>();
mojo::internal::Serialize<mojo::MapDataView<int32_t, mojo::ArrayDataView<int32_t>>>(
in_array_map, array_map_fragment, &array_map_validate_params);
fragment->array_map.Set(
array_map_fragment.is_null() ? nullptr : array_map_fragment.data());
MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
fragment->array_map.is_null(),
mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
"null array_map in TestWTFCodeGeneration struct");
decltype(Traits::handle_map(input)) in_handle_map = Traits::handle_map(input);
mojo::internal::MessageFragment<
typename decltype(fragment->handle_map)::BaseType>
handle_map_fragment(fragment.message());
constexpr const mojo::internal::ContainerValidateParams& handle_map_validate_params =
mojo::internal::GetMapValidator<*&mojo::internal::GetArrayValidator<0, false, nullptr>(), *&mojo::internal::GetArrayValidator<0, false, nullptr>()>();
mojo::internal::Serialize<mojo::MapDataView<int32_t, mojo::ScopedMessagePipeHandle>>(
in_handle_map, handle_map_fragment, &handle_map_validate_params);
fragment->handle_map.Set(
handle_map_fragment.is_null() ? nullptr : handle_map_fragment.data());
MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
fragment->handle_map.is_null(),
mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
"null handle_map in TestWTFCodeGeneration struct");
decltype(Traits::str_maps(input)) in_str_maps = Traits::str_maps(input);
mojo::internal::MessageFragment<
typename decltype(fragment->str_maps)::BaseType>
str_maps_fragment(fragment.message());
constexpr const mojo::internal::ContainerValidateParams& str_maps_validate_params =
mojo::internal::GetArrayValidator<0, false, &mojo::internal::GetMapValidator<*&mojo::internal::GetArrayValidator<0, false, &mojo::internal::GetArrayValidator<0, false, nullptr>()>(), *&mojo::internal::GetArrayValidator<0, true, &mojo::internal::GetArrayValidator<0, false, nullptr>()>()>()>();
mojo::internal::Serialize<mojo::ArrayDataView<mojo::MapDataView<mojo::StringDataView, mojo::StringDataView>>>(
in_str_maps, str_maps_fragment, &str_maps_validate_params);
fragment->str_maps.Set(
str_maps_fragment.is_null() ? nullptr : str_maps_fragment.data());
MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
fragment->str_maps.is_null(),
mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
"null str_maps in TestWTFCodeGeneration struct");
}
static bool Deserialize(::mojo::test::internal::TestWTFCodeGeneration_Data* input,
UserType* output,
Message* message) {
if (!input)
return CallSetToNullIfExists<Traits>(output);
::mojo::test::TestWTFCodeGenerationDataView data_view(input, message);
return Traits::Read(data_view, output);
}
};
} // namespace internal
namespace internal {
template <typename MaybeConstUserType>
struct Serializer<::mojo::test::TestWTFStructDataView, MaybeConstUserType> {
using UserType = typename std::remove_const<MaybeConstUserType>::type;
using Traits = StructTraits<::mojo::test::TestWTFStructDataView, UserType>;
static void Serialize(
MaybeConstUserType& input,
mojo::internal::MessageFragment<::mojo::test::internal::TestWTFStruct_Data>& fragment) {
if (CallIsNullIfExists<Traits>(input))
return;
fragment.Allocate();
decltype(Traits::str(input)) in_str = Traits::str(input);
mojo::internal::MessageFragment<
typename decltype(fragment->str)::BaseType> str_fragment(
fragment.message());
mojo::internal::Serialize<mojo::StringDataView>(
in_str, str_fragment);
fragment->str.Set(
str_fragment.is_null() ? nullptr : str_fragment.data());
MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
fragment->str.is_null(),
mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
"null str in TestWTFStruct struct");
fragment->integer = Traits::integer(input);
}
static bool Deserialize(::mojo::test::internal::TestWTFStruct_Data* input,
UserType* output,
Message* message) {
if (!input)
return CallSetToNullIfExists<Traits>(output);
::mojo::test::TestWTFStructDataView data_view(input, message);
return Traits::Read(data_view, output);
}
};
} // namespace internal
namespace internal {
template <typename MaybeConstUserType>
struct Serializer<::mojo::test::TestWTFStructWrapperDataView, MaybeConstUserType> {
using UserType = typename std::remove_const<MaybeConstUserType>::type;
using Traits = StructTraits<::mojo::test::TestWTFStructWrapperDataView, UserType>;
static void Serialize(
MaybeConstUserType& input,
mojo::internal::MessageFragment<::mojo::test::internal::TestWTFStructWrapper_Data>& fragment) {
if (CallIsNullIfExists<Traits>(input))
return;
fragment.Allocate();
decltype(Traits::nested_struct(input)) in_nested_struct = Traits::nested_struct(input);
mojo::internal::MessageFragment<
typename decltype(fragment->nested_struct)::BaseType> nested_struct_fragment(
fragment.message());
mojo::internal::Serialize<::mojo::test::TestWTFStructDataView>(
in_nested_struct, nested_struct_fragment);
fragment->nested_struct.Set(
nested_struct_fragment.is_null() ? nullptr : nested_struct_fragment.data());
MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
fragment->nested_struct.is_null(),
mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
"null nested_struct in TestWTFStructWrapper struct");
decltype(Traits::array_struct(input)) in_array_struct = Traits::array_struct(input);
mojo::internal::MessageFragment<
typename decltype(fragment->array_struct)::BaseType>
array_struct_fragment(fragment.message());
constexpr const mojo::internal::ContainerValidateParams& array_struct_validate_params =
mojo::internal::GetArrayValidator<0, false, nullptr>();
mojo::internal::Serialize<mojo::ArrayDataView<::mojo::test::TestWTFStructDataView>>(
in_array_struct, array_struct_fragment, &array_struct_validate_params);
fragment->array_struct.Set(
array_struct_fragment.is_null() ? nullptr : array_struct_fragment.data());
MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
fragment->array_struct.is_null(),
mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
"null array_struct in TestWTFStructWrapper struct");
decltype(Traits::map_struct(input)) in_map_struct = Traits::map_struct(input);
mojo::internal::MessageFragment<
typename decltype(fragment->map_struct)::BaseType>
map_struct_fragment(fragment.message());
constexpr const mojo::internal::ContainerValidateParams& map_struct_validate_params =
mojo::internal::GetMapValidator<*&mojo::internal::GetArrayValidator<0, false, nullptr>(), *&mojo::internal::GetArrayValidator<0, false, nullptr>()>();
mojo::internal::Serialize<mojo::MapDataView<::mojo::test::TestWTFStructDataView, ::mojo::test::TestWTFStructDataView>>(
in_map_struct, map_struct_fragment, &map_struct_validate_params);
fragment->map_struct.Set(
map_struct_fragment.is_null() ? nullptr : map_struct_fragment.data());
MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
fragment->map_struct.is_null(),
mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
"null map_struct in TestWTFStructWrapper struct");
}
static bool Deserialize(::mojo::test::internal::TestWTFStructWrapper_Data* input,
UserType* output,
Message* message) {
if (!input)
return CallSetToNullIfExists<Traits>(output);
::mojo::test::TestWTFStructWrapperDataView data_view(input, message);
return Traits::Read(data_view, output);
}
};
} // namespace internal
namespace internal {
template <typename MaybeConstUserType>
struct Serializer<::mojo::test::TestWTFCodeGeneration2DataView, MaybeConstUserType> {
using UserType = typename std::remove_const<MaybeConstUserType>::type;
using Traits = UnionTraits<::mojo::test::TestWTFCodeGeneration2DataView, UserType>;
static void Serialize(MaybeConstUserType& input,
MessageFragment<::mojo::test::internal::TestWTFCodeGeneration2_Data>& fragment,
bool inlined) {
if (CallIsNullIfExists<Traits>(input)) {
if (inlined)
fragment->set_null();
return;
}
if (!inlined)
fragment.Allocate();
// TODO(azani): Handle unknown and objects.
// Set the not-null flag.
fragment->size = kUnionDataSize;
fragment->tag = Traits::GetTag(input);
switch (fragment->tag) {
case ::mojo::test::TestWTFCodeGeneration2DataView::Tag::kStr: {
decltype(Traits::str(input))
in_str = Traits::str(input);
mojo::internal::MessageFragment<
typename decltype(fragment->data.f_str)::BaseType>
value_fragment(fragment.message());
mojo::internal::Serialize<mojo::StringDataView>(
in_str, value_fragment);
MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
value_fragment.is_null(),
mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
"null str in TestWTFCodeGeneration2 union");
fragment->data.f_str.Set(
value_fragment.is_null() ? nullptr : value_fragment.data());
break;
}
case ::mojo::test::TestWTFCodeGeneration2DataView::Tag::kStrs: {
decltype(Traits::strs(input))
in_strs = Traits::strs(input);
mojo::internal::MessageFragment<
typename decltype(fragment->data.f_strs)::BaseType>
value_fragment(fragment.message());
constexpr const mojo::internal::ContainerValidateParams& strs_validate_params =
mojo::internal::GetArrayValidator<0, false, &mojo::internal::GetArrayValidator<0, false, nullptr>()>();
mojo::internal::Serialize<mojo::ArrayDataView<mojo::StringDataView>>(
in_strs, value_fragment, &strs_validate_params);
MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
value_fragment.is_null(),
mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
"null strs in TestWTFCodeGeneration2 union");
fragment->data.f_strs.Set(
value_fragment.is_null() ? nullptr : value_fragment.data());
break;
}
case ::mojo::test::TestWTFCodeGeneration2DataView::Tag::kStrMap: {
decltype(Traits::str_map(input))
in_str_map = Traits::str_map(input);
mojo::internal::MessageFragment<
typename decltype(fragment->data.f_str_map)::BaseType>
value_fragment(fragment.message());
constexpr const mojo::internal::ContainerValidateParams& str_map_validate_params =
mojo::internal::GetMapValidator<*&mojo::internal::GetArrayValidator<0, false, &mojo::internal::GetArrayValidator<0, false, nullptr>()>(), *&mojo::internal::GetArrayValidator<0, true, &mojo::internal::GetArrayValidator<0, false, nullptr>()>()>();
mojo::internal::Serialize<mojo::MapDataView<mojo::StringDataView, mojo::StringDataView>>(
in_str_map, value_fragment, &str_map_validate_params);
MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING(
value_fragment.is_null(),
mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
"null str_map in TestWTFCodeGeneration2 union");
fragment->data.f_str_map.Set(
value_fragment.is_null() ? nullptr : value_fragment.data());
break;
}
}
}
static bool Deserialize(::mojo::test::internal::TestWTFCodeGeneration2_Data* input,
UserType* output,
Message* message) {
if (!input || input->is_null())
return CallSetToNullIfExists<Traits>(output);
::mojo::test::TestWTFCodeGeneration2DataView data_view(input, message);
return Traits::Read(data_view, output);
}
};
} // namespace internal
} // namespace mojo
namespace mojo::test {
inline void TestWTFCodeGenerationDataView::GetStrDataView(
mojo::StringDataView* output) {
auto pointer = data_->str.Get();
*output = mojo::StringDataView(pointer, message_);
}
inline void TestWTFCodeGenerationDataView::GetNullableStrDataView(
mojo::StringDataView* output) {
auto pointer = data_->nullable_str.Get();
*output = mojo::StringDataView(pointer, message_);
}
inline void TestWTFCodeGenerationDataView::GetStrsDataView(
mojo::ArrayDataView<mojo::StringDataView>* output) {
auto pointer = data_->strs.Get();
*output = mojo::ArrayDataView<mojo::StringDataView>(pointer, message_);
}
inline void TestWTFCodeGenerationDataView::GetNullableStrsDataView(
mojo::ArrayDataView<mojo::StringDataView>* output) {
auto pointer = data_->nullable_strs.Get();
*output = mojo::ArrayDataView<mojo::StringDataView>(pointer, message_);
}
inline void TestWTFCodeGenerationDataView::GetArraysDataView(
mojo::ArrayDataView<mojo::ArrayDataView<int32_t>>* output) {
auto pointer = data_->arrays.Get();
*output = mojo::ArrayDataView<mojo::ArrayDataView<int32_t>>(pointer, message_);
}
inline void TestWTFCodeGenerationDataView::GetBoolsDataView(
mojo::ArrayDataView<bool>* output) {
auto pointer = data_->bools.Get();
*output = mojo::ArrayDataView<bool>(pointer, message_);
}
inline void TestWTFCodeGenerationDataView::GetHandlesDataView(
mojo::ArrayDataView<mojo::ScopedMessagePipeHandle>* output) {
auto pointer = data_->handles.Get();
*output = mojo::ArrayDataView<mojo::ScopedMessagePipeHandle>(pointer, message_);
}
inline void TestWTFCodeGenerationDataView::GetStrMapDataView(
mojo::MapDataView<mojo::StringDataView, mojo::StringDataView>* output) {
auto pointer = data_->str_map.Get();
*output = mojo::MapDataView<mojo::StringDataView, mojo::StringDataView>(pointer, message_);
}
inline void TestWTFCodeGenerationDataView::GetArrayMapDataView(
mojo::MapDataView<int32_t, mojo::ArrayDataView<int32_t>>* output) {
auto pointer = data_->array_map.Get();
*output = mojo::MapDataView<int32_t, mojo::ArrayDataView<int32_t>>(pointer, message_);
}
inline void TestWTFCodeGenerationDataView::GetHandleMapDataView(
mojo::MapDataView<int32_t, mojo::ScopedMessagePipeHandle>* output) {
auto pointer = data_->handle_map.Get();
*output = mojo::MapDataView<int32_t, mojo::ScopedMessagePipeHandle>(pointer, message_);
}
inline void TestWTFCodeGenerationDataView::GetStrMapsDataView(
mojo::ArrayDataView<mojo::MapDataView<mojo::StringDataView, mojo::StringDataView>>* output) {
auto pointer = data_->str_maps.Get();
*output = mojo::ArrayDataView<mojo::MapDataView<mojo::StringDataView, mojo::StringDataView>>(pointer, message_);
}
inline void TestWTFStructDataView::GetStrDataView(
mojo::StringDataView* output) {
auto pointer = data_->str.Get();
*output = mojo::StringDataView(pointer, message_);
}
inline void TestWTFStructWrapperDataView::GetNestedStructDataView(
TestWTFStructDataView* output) {
auto pointer = data_->nested_struct.Get();
*output = TestWTFStructDataView(pointer, message_);
}
inline void TestWTFStructWrapperDataView::GetArrayStructDataView(
mojo::ArrayDataView<TestWTFStructDataView>* output) {
auto pointer = data_->array_struct.Get();
*output = mojo::ArrayDataView<TestWTFStructDataView>(pointer, message_);
}
inline void TestWTFStructWrapperDataView::GetMapStructDataView(
mojo::MapDataView<TestWTFStructDataView, TestWTFStructDataView>* output) {
auto pointer = data_->map_struct.Get();
*output = mojo::MapDataView<TestWTFStructDataView, TestWTFStructDataView>(pointer, message_);
}
inline void TestWTFCodeGeneration2DataView::GetStrDataView(
mojo::StringDataView* output) const {
CHECK(is_str());
*output = mojo::StringDataView(data_->data.f_str.Get(), message_);
}
inline void TestWTFCodeGeneration2DataView::GetStrsDataView(
mojo::ArrayDataView<mojo::StringDataView>* output) const {
CHECK(is_strs());
*output = mojo::ArrayDataView<mojo::StringDataView>(data_->data.f_strs.Get(), message_);
}
inline void TestWTFCodeGeneration2DataView::GetStrMapDataView(
mojo::MapDataView<mojo::StringDataView, mojo::StringDataView>* output) const {
CHECK(is_str_map());
*output = mojo::MapDataView<mojo::StringDataView, mojo::StringDataView>(data_->data.f_str_map.Get(), message_);
}
} // mojo::test
// Declare TraceFormatTraits for enums, which should be defined in ::perfetto
// namespace.
namespace perfetto {
template <>
struct TraceFormatTraits<::mojo::test::TopLevelEnum> {
static void WriteIntoTrace(perfetto::TracedValue context, ::mojo::test::TopLevelEnum value);
};
} // namespace perfetto
namespace perfetto {
template <>
struct TraceFormatTraits<::mojo::test::TestWTFStruct_NestedEnum> {
static void WriteIntoTrace(perfetto::TracedValue context, ::mojo::test::TestWTFStruct_NestedEnum value);
};
} // namespace perfetto
namespace perfetto {
template <>
struct TraceFormatTraits<::mojo::test::TestWTF_NestedEnum> {
static void WriteIntoTrace(perfetto::TracedValue context, ::mojo::test::TestWTF_NestedEnum value);
};
} // namespace perfetto
#endif // MOJO_PUBLIC_INTERFACES_BINDINGS_TESTS_TEST_WTF_TYPES_MOJOM_SHARED_H_
/* Metadata comment
eyJ0eXBlIjogImt5dGhlMCIsICJtZXRhIjogW3sidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJi
ZWdpbiI6IDI3MDYsICJlbmQiOiAyNzE4LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwg
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0v
c3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVG9wTGV2ZWxFbnVtIn0sICJlZGdl
IjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwg
ImJlZ2luIjogMjc4MiwgImVuZCI6IDI3ODQsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20i
LCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1
bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5Ub3BMZXZlbEVudW0uRTAifSwg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAiYmVnaW4iOiAyODQxLCAiZW5kIjogMjg0MywgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJt
b2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2No
cm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlRvcExldmVsRW51bS5F
MSJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJiZWdpbiI6IDMxNjEsICJlbmQiOiAzMTg1LCAidm5hbWUiOiB7Imxhbmd1YWdl
IjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFy
Y2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVGVzdFdURlN0
cnVjdC5OZXN0ZWRFbnVtIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0
eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogMzI2MSwgImVuZCI6IDMyNjMsICJ2bmFt
ZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJj
ZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1vam8u
dGVzdC5UZXN0V1RGU3RydWN0Lk5lc3RlZEVudW0uRTAifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdl
L2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAzMzMyLCAi
ZW5kIjogMzMzNCwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hy
b21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJz
aWduYXR1cmUiOiAibW9qby50ZXN0LlRlc3RXVEZTdHJ1Y3QuTmVzdGVkRW51bS5FMSJ9LCAiZWRn
ZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIs
ICJiZWdpbiI6IDM2ODIsICJlbmQiOiAzNzAwLCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9t
IiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21p
dW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVGVzdFdURi5OZXN0ZWRFbnVt
In0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgImJlZ2luIjogMzc3MCwgImVuZCI6IDM3NzIsICJ2bmFtZSI6IHsibGFuZ3VhZ2Ui
OiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJj
aC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5UZXN0V1RGLk5l
c3RlZEVudW0uRTAifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUi
OiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAzODM1LCAiZW5kIjogMzgzNywgInZuYW1lIjog
eyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0
LlRlc3RXVEYuTmVzdGVkRW51bS5FMSJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVz
In1dfQ==
*/