1645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Copyright 2016 The Chromium Authors. All rights reserved. 2645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Use of this source code is governed by a BSD-style license that can be 3645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// found in the LICENSE file. 4645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 5645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#ifndef MOJO_PUBLIC_CPP_BINDINGS_TESTS_STRUCT_WITH_TRAITS_IMPL_TRAITS_H_ 6645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#define MOJO_PUBLIC_CPP_BINDINGS_TESTS_STRUCT_WITH_TRAITS_IMPL_TRAITS_H_ 7645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 8645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include <stdint.h> 9645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 10645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include <string> 11645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include <vector> 12645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 13645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include "base/strings/string_piece.h" 14645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include "mojo/public/cpp/bindings/struct_traits.h" 15645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include "mojo/public/cpp/bindings/tests/struct_with_traits_impl.h" 16645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include "mojo/public/interfaces/bindings/tests/struct_with_traits.mojom.h" 17645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 18645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chaveznamespace mojo { 19645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 20645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chaveztemplate <> 21645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezstruct StructTraits<test::NestedStructWithTraits, 22645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez test::NestedStructWithTraitsImpl> { 23645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez static void* SetUpContext(const test::NestedStructWithTraitsImpl& input); 24645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez static void TearDownContext(const test::NestedStructWithTraitsImpl& input, 25645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez void* context); 26645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 27645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez static int32_t value(const test::NestedStructWithTraitsImpl& input, 28645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez void* context); 29645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 30645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez static bool Read(test::NestedStructWithTraits::DataView data, 31645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez test::NestedStructWithTraitsImpl* output); 32645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}; 33645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 34645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chaveztemplate <> 35645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezstruct EnumTraits<test::EnumWithTraits, test::EnumWithTraitsImpl> { 36645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez static test::EnumWithTraits ToMojom(test::EnumWithTraitsImpl input); 37645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez static bool FromMojom(test::EnumWithTraits input, 38645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez test::EnumWithTraitsImpl* output); 39645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}; 40645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 41645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chaveztemplate <> 42645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezstruct StructTraits<test::StructWithTraits, test::StructWithTraitsImpl> { 43645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez // Deserialization to test::StructTraitsImpl. 44645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez static bool Read(test::StructWithTraits::DataView data, 45645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez test::StructWithTraitsImpl* out); 46645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 47645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez // Fields in test::StructWithTraits. 48645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez // See src/mojo/public/interfaces/bindings/tests/struct_with_traits.mojom. 49645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez static test::EnumWithTraitsImpl f_enum( 50645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez const test::StructWithTraitsImpl& value) { 51645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return value.get_enum(); 52645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 53645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 54645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez static bool f_bool(const test::StructWithTraitsImpl& value) { 55645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return value.get_bool(); 56645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 57645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 58645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez static uint32_t f_uint32(const test::StructWithTraitsImpl& value) { 59645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return value.get_uint32(); 60645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 61645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 62645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez static uint64_t f_uint64(const test::StructWithTraitsImpl& value) { 63645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return value.get_uint64(); 64645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 65645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 66645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez static base::StringPiece f_string(const test::StructWithTraitsImpl& value) { 67645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return value.get_string_as_string_piece(); 68645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 69645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 70645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez static const std::string& f_string2(const test::StructWithTraitsImpl& value) { 71645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return value.get_string(); 72645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 73645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 74645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez static const std::vector<std::string>& f_string_array( 75645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez const test::StructWithTraitsImpl& value) { 76645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return value.get_string_array(); 77645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 78645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 79645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez static const test::NestedStructWithTraitsImpl& f_struct( 80645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez const test::StructWithTraitsImpl& value) { 81645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return value.get_struct(); 82645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 83645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 84645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez static const std::vector<test::NestedStructWithTraitsImpl>& f_struct_array( 85645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez const test::StructWithTraitsImpl& value) { 86645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return value.get_struct_array(); 87645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 88645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 89645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez static const std::map<std::string, test::NestedStructWithTraitsImpl>& 90645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez f_struct_map(const test::StructWithTraitsImpl& value) { 91645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return value.get_struct_map(); 92645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 93645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}; 94645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 95645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chaveztemplate <> 96645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezstruct StructTraits<test::PassByValueStructWithTraits, 97645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez test::PassByValueStructWithTraitsImpl> { 98645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez // Deserialization to test::PassByValueStructTraitsImpl. 99645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez static bool Read(test::PassByValueStructWithTraits::DataView data, 100645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez test::PassByValueStructWithTraitsImpl* out); 101645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 102645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez // Fields in test::PassByValueStructWithTraits. 103645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez // See src/mojo/public/interfaces/bindings/tests/struct_with_traits.mojom. 104645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez static ScopedHandle f_handle(test::PassByValueStructWithTraitsImpl& value) { 105645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return std::move(value.get_mutable_handle()); 106645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 107645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}; 108645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 109645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chaveztemplate <> 110645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezstruct StructTraits<test::StructWithTraitsForUniquePtrTest, 111645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez std::unique_ptr<int>> { 112645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez static int f_int32(const std::unique_ptr<int>& data) { return *data; } 113645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 114645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez static bool Read(test::StructWithTraitsForUniquePtrTest::DataView data, 115645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez std::unique_ptr<int>* out) { 116645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez out->reset(new int(data.f_int32())); 117645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return true; 118645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 119645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}; 120645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 121645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez} // namespace mojo 122645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 123645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#endif // MOJO_PUBLIC_CPP_BINDINGS_TESTS_STRUCT_WITH_TRAITS_IMPL_TRAITS_H_ 124