• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_TESTS_STRUCT_WITH_TRAITS_IMPL_TRAITS_H_
6 #define MOJO_PUBLIC_CPP_BINDINGS_TESTS_STRUCT_WITH_TRAITS_IMPL_TRAITS_H_
7 
8 #include <stdint.h>
9 
10 #include <string>
11 #include <vector>
12 
13 #include "base/strings/string_piece.h"
14 #include "mojo/public/cpp/bindings/struct_traits.h"
15 #include "mojo/public/cpp/bindings/tests/struct_with_traits_impl.h"
16 #include "mojo/public/interfaces/bindings/tests/struct_with_traits.mojom.h"
17 
18 namespace mojo {
19 
20 template <>
21 struct StructTraits<test::NestedStructWithTraits,
22                     test::NestedStructWithTraitsImpl> {
23   static void* SetUpContext(const test::NestedStructWithTraitsImpl& input);
24   static void TearDownContext(const test::NestedStructWithTraitsImpl& input,
25                               void* context);
26 
27   static int32_t value(const test::NestedStructWithTraitsImpl& input,
28                        void* context);
29 
30   static bool Read(test::NestedStructWithTraits::DataView data,
31                    test::NestedStructWithTraitsImpl* output);
32 };
33 
34 template <>
35 struct EnumTraits<test::EnumWithTraits, test::EnumWithTraitsImpl> {
36   static test::EnumWithTraits ToMojom(test::EnumWithTraitsImpl input);
37   static bool FromMojom(test::EnumWithTraits input,
38                         test::EnumWithTraitsImpl* output);
39 };
40 
41 template <>
42 struct StructTraits<test::StructWithTraits, test::StructWithTraitsImpl> {
43   // Deserialization to test::StructTraitsImpl.
44   static bool Read(test::StructWithTraits::DataView data,
45                    test::StructWithTraitsImpl* out);
46 
47   // Fields in test::StructWithTraits.
48   // See src/mojo/public/interfaces/bindings/tests/struct_with_traits.mojom.
49   static test::EnumWithTraitsImpl f_enum(
50       const test::StructWithTraitsImpl& value) {
51     return value.get_enum();
52   }
53 
54   static bool f_bool(const test::StructWithTraitsImpl& value) {
55     return value.get_bool();
56   }
57 
58   static uint32_t f_uint32(const test::StructWithTraitsImpl& value) {
59     return value.get_uint32();
60   }
61 
62   static uint64_t f_uint64(const test::StructWithTraitsImpl& value) {
63     return value.get_uint64();
64   }
65 
66   static base::StringPiece f_string(const test::StructWithTraitsImpl& value) {
67     return value.get_string_as_string_piece();
68   }
69 
70   static const std::string& f_string2(const test::StructWithTraitsImpl& value) {
71     return value.get_string();
72   }
73 
74   static const std::vector<std::string>& f_string_array(
75       const test::StructWithTraitsImpl& value) {
76     return value.get_string_array();
77   }
78 
79   static const test::NestedStructWithTraitsImpl& f_struct(
80       const test::StructWithTraitsImpl& value) {
81     return value.get_struct();
82   }
83 
84   static const std::vector<test::NestedStructWithTraitsImpl>& f_struct_array(
85       const test::StructWithTraitsImpl& value) {
86     return value.get_struct_array();
87   }
88 
89   static const std::map<std::string, test::NestedStructWithTraitsImpl>&
90   f_struct_map(const test::StructWithTraitsImpl& value) {
91     return value.get_struct_map();
92   }
93 };
94 
95 template <>
96 struct StructTraits<test::PassByValueStructWithTraits,
97                     test::PassByValueStructWithTraitsImpl> {
98   // Deserialization to test::PassByValueStructTraitsImpl.
99   static bool Read(test::PassByValueStructWithTraits::DataView data,
100                    test::PassByValueStructWithTraitsImpl* out);
101 
102   // Fields in test::PassByValueStructWithTraits.
103   // See src/mojo/public/interfaces/bindings/tests/struct_with_traits.mojom.
104   static ScopedHandle f_handle(test::PassByValueStructWithTraitsImpl& value) {
105     return std::move(value.get_mutable_handle());
106   }
107 };
108 
109 template <>
110 struct StructTraits<test::StructWithTraitsForUniquePtrTest,
111                     std::unique_ptr<int>> {
112   static int f_int32(const std::unique_ptr<int>& data) { return *data; }
113 
114   static bool Read(test::StructWithTraitsForUniquePtrTest::DataView data,
115                    std::unique_ptr<int>* out) {
116     out->reset(new int(data.f_int32()));
117     return true;
118   }
119 };
120 
121 }  // namespace mojo
122 
123 #endif  // MOJO_PUBLIC_CPP_BINDINGS_TESTS_STRUCT_WITH_TRAITS_IMPL_TRAITS_H_
124