• 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 #include "mojo/public/cpp/bindings/tests/struct_with_traits_impl_traits.h"
6 
7 namespace mojo {
8 namespace {
9 
10 struct Context {
11   int32_t value;
12 };
13 
14 }  // namespace
15 
16 // static
17 void* StructTraits<test::NestedStructWithTraits,
18                    test::NestedStructWithTraitsImpl>::
SetUpContext(const test::NestedStructWithTraitsImpl & input)19     SetUpContext(const test::NestedStructWithTraitsImpl& input) {
20   Context* context = new Context;
21   context->value = input.value;
22   return context;
23 }
24 
25 // static
26 void StructTraits<test::NestedStructWithTraits,
27                   test::NestedStructWithTraitsImpl>::
TearDownContext(const test::NestedStructWithTraitsImpl & input,void * context)28     TearDownContext(const test::NestedStructWithTraitsImpl& input,
29                     void* context) {
30   Context* context_obj = static_cast<Context*>(context);
31   CHECK_EQ(context_obj->value, input.value);
32   delete context_obj;
33 }
34 
35 // static
36 int32_t StructTraits<test::NestedStructWithTraits,
37                      test::NestedStructWithTraitsImpl>::
value(const test::NestedStructWithTraitsImpl & input,void * context)38     value(const test::NestedStructWithTraitsImpl& input, void* context) {
39   Context* context_obj = static_cast<Context*>(context);
40   CHECK_EQ(context_obj->value, input.value);
41   return input.value;
42 }
43 
44 // static
45 bool StructTraits<test::NestedStructWithTraits,
46                   test::NestedStructWithTraitsImpl>::
Read(test::NestedStructWithTraits::DataView data,test::NestedStructWithTraitsImpl * output)47     Read(test::NestedStructWithTraits::DataView data,
48          test::NestedStructWithTraitsImpl* output) {
49   output->value = data.value();
50   return true;
51 }
52 
53 test::EnumWithTraits
ToMojom(test::EnumWithTraitsImpl input)54 EnumTraits<test::EnumWithTraits, test::EnumWithTraitsImpl>::ToMojom(
55     test::EnumWithTraitsImpl input) {
56   switch (input) {
57     case test::EnumWithTraitsImpl::CUSTOM_VALUE_0:
58       return test::EnumWithTraits::VALUE_0;
59     case test::EnumWithTraitsImpl::CUSTOM_VALUE_1:
60       return test::EnumWithTraits::VALUE_1;
61   };
62 
63   NOTREACHED();
64   return test::EnumWithTraits::VALUE_0;
65 }
66 
FromMojom(test::EnumWithTraits input,test::EnumWithTraitsImpl * output)67 bool EnumTraits<test::EnumWithTraits, test::EnumWithTraitsImpl>::FromMojom(
68     test::EnumWithTraits input,
69     test::EnumWithTraitsImpl* output) {
70   switch (input) {
71     case test::EnumWithTraits::VALUE_0:
72       *output = test::EnumWithTraitsImpl::CUSTOM_VALUE_0;
73       return true;
74     case test::EnumWithTraits::VALUE_1:
75       *output = test::EnumWithTraitsImpl::CUSTOM_VALUE_1;
76       return true;
77   };
78 
79   return false;
80 }
81 
82 // static
Read(test::StructWithTraits::DataView data,test::StructWithTraitsImpl * out)83 bool StructTraits<test::StructWithTraits, test::StructWithTraitsImpl>::Read(
84     test::StructWithTraits::DataView data,
85     test::StructWithTraitsImpl* out) {
86   test::EnumWithTraitsImpl f_enum;
87   if (!data.ReadFEnum(&f_enum))
88     return false;
89   out->set_enum(f_enum);
90 
91   out->set_bool(data.f_bool());
92   out->set_uint32(data.f_uint32());
93   out->set_uint64(data.f_uint64());
94 
95   base::StringPiece f_string;
96   std::string f_string2;
97   if (!data.ReadFString(&f_string) || !data.ReadFString2(&f_string2) ||
98       f_string != f_string2) {
99     return false;
100   }
101   out->set_string(f_string2);
102 
103   if (!data.ReadFStringArray(&out->get_mutable_string_array()))
104     return false;
105 
106   if (!data.ReadFStruct(&out->get_mutable_struct()))
107     return false;
108 
109   if (!data.ReadFStructArray(&out->get_mutable_struct_array()))
110     return false;
111 
112   if (!data.ReadFStructMap(&out->get_mutable_struct_map()))
113     return false;
114 
115   return true;
116 }
117 
118 // static
119 bool StructTraits<test::PassByValueStructWithTraits,
120                   test::PassByValueStructWithTraitsImpl>::
Read(test::PassByValueStructWithTraits::DataView data,test::PassByValueStructWithTraitsImpl * out)121     Read(test::PassByValueStructWithTraits::DataView data,
122          test::PassByValueStructWithTraitsImpl* out) {
123   out->get_mutable_handle() = data.TakeFHandle();
124   return true;
125 }
126 
127 }  // namespace mojo
128