blob: 2586d8d0d4194e7779e5ee5e335c28f1b5bc3bbc [file] [log] [blame]
// Copyright 2016 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.
#include "mojo/public/cpp/bindings/tests/struct_with_traits_impl_traits.h"
namespace mojo {
// static
int32_t StructTraits<test::NestedStructWithTraitsDataView,
test::NestedStructWithTraitsImpl>::
value(const test::NestedStructWithTraitsImpl& input) {
return input.value;
}
// static
bool StructTraits<test::NestedStructWithTraitsDataView,
test::NestedStructWithTraitsImpl>::
Read(test::NestedStructWithTraits::DataView data,
test::NestedStructWithTraitsImpl* output) {
output->value = data.value();
return true;
}
test::EnumWithTraits
EnumTraits<test::EnumWithTraits, test::EnumWithTraitsImpl>::ToMojom(
test::EnumWithTraitsImpl input) {
switch (input) {
case test::EnumWithTraitsImpl::CUSTOM_VALUE_0:
return test::EnumWithTraits::VALUE_0;
case test::EnumWithTraitsImpl::CUSTOM_VALUE_1:
return test::EnumWithTraits::VALUE_1;
};
NOTREACHED();
return test::EnumWithTraits::VALUE_0;
}
bool EnumTraits<test::EnumWithTraits, test::EnumWithTraitsImpl>::FromMojom(
test::EnumWithTraits input,
test::EnumWithTraitsImpl* output) {
switch (input) {
case test::EnumWithTraits::VALUE_0:
*output = test::EnumWithTraitsImpl::CUSTOM_VALUE_0;
return true;
case test::EnumWithTraits::VALUE_1:
*output = test::EnumWithTraitsImpl::CUSTOM_VALUE_1;
return true;
};
return false;
}
// static
bool StructTraits<test::StructWithTraitsDataView, test::StructWithTraitsImpl>::
Read(test::StructWithTraits::DataView data,
test::StructWithTraitsImpl* out) {
test::EnumWithTraitsImpl f_enum;
if (!data.ReadFEnum(&f_enum))
return false;
out->set_enum(f_enum);
out->set_bool(data.f_bool());
out->set_uint32(data.f_uint32());
out->set_uint64(data.f_uint64());
base::StringPiece f_string;
std::string f_string2;
if (!data.ReadFString(&f_string) || !data.ReadFString2(&f_string2) ||
f_string != f_string2) {
return false;
}
out->set_string(f_string2);
if (!data.ReadFStringArray(&out->get_mutable_string_array()))
return false;
// We can't deserialize as a std::set, so we have to manually copy from the
// data view.
ArrayDataView<StringDataView> string_set_data_view;
data.GetFStringSetDataView(&string_set_data_view);
for (size_t i = 0; i < string_set_data_view.size(); ++i) {
std::string value;
string_set_data_view.Read(i, &value);
out->get_mutable_string_set().insert(value);
}
if (!data.ReadFStruct(&out->get_mutable_struct()))
return false;
if (!data.ReadFStructArray(&out->get_mutable_struct_array()))
return false;
if (!data.ReadFStructMap(&out->get_mutable_struct_map()))
return false;
return true;
}
// static
bool StructTraits<test::MoveOnlyStructWithTraitsDataView,
test::MoveOnlyStructWithTraitsImpl>::
Read(test::MoveOnlyStructWithTraits::DataView data,
test::MoveOnlyStructWithTraitsImpl* out) {
out->get_mutable_handle() = data.TakeFHandle();
return true;
}
} // namespace mojo