Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(617)

Side by Side Diff: mojo/common/values_struct_traits.h

Issue 2577563002: Add struct traits for base::Value. (Closed)
Patch Set: rebase Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « mojo/common/values.typemap ('k') | mojo/common/values_struct_traits.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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_COMMON_VALUES_STRUCT_TRAITS_H_
6 #define MOJO_COMMON_VALUES_STRUCT_TRAITS_H_
7
8 #include "base/values.h"
9 #include "mojo/common/values.mojom.h"
10 #include "mojo/public/cpp/bindings/array_traits.h"
11 #include "mojo/public/cpp/bindings/map_traits.h"
12 #include "mojo/public/cpp/bindings/struct_traits.h"
13 #include "mojo/public/cpp/bindings/union_traits.h"
14
15 namespace mojo {
16
17 template <>
18 struct ArrayTraits<base::ListValue> {
19 using Element = std::unique_ptr<base::Value>;
20 using ConstIterator = base::ListValue::const_iterator;
21
22 static size_t GetSize(const base::ListValue& input) {
23 return input.GetSize();
24 }
25
26 static ConstIterator GetBegin(const base::ListValue& input) {
27 return input.begin();
28 }
29
30 static void AdvanceIterator(ConstIterator& iterator) { ++iterator; }
31
32 static const Element& GetValue(ConstIterator& iterator) { return *iterator; }
33 };
34
35 template <>
36 struct StructTraits<common::mojom::ListValueDataView, base::ListValue> {
37 static const base::ListValue& values(const base::ListValue& value) {
38 return value;
39 }
40 };
41
42 template <>
43 struct StructTraits<common::mojom::ListValueDataView,
44 std::unique_ptr<base::ListValue>> {
45 static bool IsNull(const std::unique_ptr<base::ListValue>& value) {
46 return !value;
47 }
48
49 static void SetToNull(std::unique_ptr<base::ListValue>* value) {
50 value->reset();
51 }
52
53 static const base::ListValue& values(
54 const std::unique_ptr<base::ListValue>& value) {
55 return *value;
56 }
57
58 static bool Read(common::mojom::ListValueDataView data,
59 std::unique_ptr<base::ListValue>* value);
60 };
61
62 template <>
63 struct MapTraits<base::DictionaryValue> {
64 using Key = std::string;
65 using Value = base::Value;
66 using Iterator = base::DictionaryValue::Iterator;
67
68 static size_t GetSize(const base::DictionaryValue& input) {
69 return input.size();
70 }
71
72 static Iterator GetBegin(const base::DictionaryValue& input) {
73 return Iterator(input);
74 }
75
76 static void AdvanceIterator(Iterator& iterator) { iterator.Advance(); }
77
78 static const Key& GetKey(Iterator& iterator) { return iterator.key(); }
79
80 static const Value& GetValue(Iterator& iterator) { return iterator.value(); }
81 };
82
83 template <>
84 struct StructTraits<common::mojom::DictionaryValueDataView,
85 base::DictionaryValue> {
86 static const base::DictionaryValue& values(
87 const base::DictionaryValue& value) {
88 return value;
89 }
90 };
91
92 template <>
93 struct StructTraits<common::mojom::DictionaryValueDataView,
94 std::unique_ptr<base::DictionaryValue>> {
95 static bool IsNull(const std::unique_ptr<base::DictionaryValue>& value) {
96 return !value;
97 }
98
99 static void SetToNull(std::unique_ptr<base::DictionaryValue>* value) {
100 value->reset();
101 }
102
103 static const base::DictionaryValue& values(
104 const std::unique_ptr<base::DictionaryValue>& value) {
105 return *value;
106 }
107 static bool Read(common::mojom::DictionaryValueDataView data,
108 std::unique_ptr<base::DictionaryValue>* value);
109 };
110
111 template <>
112 struct UnionTraits<common::mojom::ValueDataView, base::Value> {
113 static common::mojom::ValueDataView::Tag GetTag(const base::Value& data) {
114 switch (data.GetType()) {
115 case base::Value::Type::NONE:
116 return common::mojom::ValueDataView::Tag::NULL_VALUE;
117 case base::Value::Type::BOOLEAN:
118 return common::mojom::ValueDataView::Tag::BOOL_VALUE;
119 case base::Value::Type::INTEGER:
120 return common::mojom::ValueDataView::Tag::INT_VALUE;
121 case base::Value::Type::DOUBLE:
122 return common::mojom::ValueDataView::Tag::DOUBLE_VALUE;
123 case base::Value::Type::STRING:
124 return common::mojom::ValueDataView::Tag::STRING_VALUE;
125 case base::Value::Type::BINARY:
126 return common::mojom::ValueDataView::Tag::BINARY_VALUE;
127 case base::Value::Type::DICTIONARY:
128 return common::mojom::ValueDataView::Tag::DICTIONARY_VALUE;
129 case base::Value::Type::LIST:
130 return common::mojom::ValueDataView::Tag::LIST_VALUE;
131 }
132 NOTREACHED();
133 return common::mojom::ValueDataView::Tag::NULL_VALUE;
134 }
135
136 static common::mojom::NullValuePtr null_value(const base::Value& value) {
137 return common::mojom::NullValuePtr();
138 }
139
140 static bool bool_value(const base::Value& value) {
141 bool bool_value{};
142 if (!value.GetAsBoolean(&bool_value))
143 NOTREACHED();
144 return bool_value;
145 }
146
147 static int32_t int_value(const base::Value& value) {
148 int int_value{};
149 if (!value.GetAsInteger(&int_value))
150 NOTREACHED();
151 return int_value;
152 }
153
154 static double double_value(const base::Value& value) {
155 double double_value{};
156 if (!value.GetAsDouble(&double_value))
157 NOTREACHED();
158 return double_value;
159 }
160
161 static base::StringPiece string_value(const base::Value& value) {
162 base::StringPiece string_piece;
163 if (!value.GetAsString(&string_piece))
164 NOTREACHED();
165 return string_piece;
166 }
167
168 static mojo::ConstCArray<uint8_t> binary_value(const base::Value& value) {
169 const base::BinaryValue* binary_value = nullptr;
170 if (!value.GetAsBinary(&binary_value))
171 NOTREACHED();
172 return mojo::ConstCArray<uint8_t>(
173 binary_value->GetSize(),
174 reinterpret_cast<const uint8_t*>(binary_value->GetBuffer()));
175 }
176
177 static const base::ListValue& list_value(const base::Value& value) {
178 const base::ListValue* list_value = nullptr;
179 if (!value.GetAsList(&list_value))
180 NOTREACHED();
181 return *list_value;
182 }
183 static const base::DictionaryValue& dictionary_value(
184 const base::Value& value) {
185 const base::DictionaryValue* dictionary_value = nullptr;
186 if (!value.GetAsDictionary(&dictionary_value))
187 NOTREACHED();
188 return *dictionary_value;
189 }
190 };
191
192 template <>
193 struct UnionTraits<common::mojom::ValueDataView, std::unique_ptr<base::Value>> {
194 static bool IsNull(const std::unique_ptr<base::Value>& value) {
195 return !value;
196 }
197
198 static void SetToNull(std::unique_ptr<base::Value>* value) { value->reset(); }
199
200 static common::mojom::ValueDataView::Tag GetTag(
201 const std::unique_ptr<base::Value>& value) {
202 return UnionTraits<common::mojom::ValueDataView, base::Value>::GetTag(
203 *value);
204 }
205
206 static common::mojom::NullValuePtr null_value(
207 const std::unique_ptr<base::Value>& value) {
208 return UnionTraits<common::mojom::ValueDataView, base::Value>::null_value(
209 *value);
210 }
211 static bool bool_value(const std::unique_ptr<base::Value>& value) {
212 return UnionTraits<common::mojom::ValueDataView, base::Value>::bool_value(
213 *value);
214 }
215 static int32_t int_value(const std::unique_ptr<base::Value>& value) {
216 return UnionTraits<common::mojom::ValueDataView, base::Value>::int_value(
217 *value);
218 }
219 static double double_value(const std::unique_ptr<base::Value>& value) {
220 return UnionTraits<common::mojom::ValueDataView, base::Value>::double_value(
221 *value);
222 }
223 static base::StringPiece string_value(
224 const std::unique_ptr<base::Value>& value) {
225 return UnionTraits<common::mojom::ValueDataView, base::Value>::string_value(
226 *value);
227 }
228 static mojo::ConstCArray<uint8_t> binary_value(
229 const std::unique_ptr<base::Value>& value) {
230 return UnionTraits<common::mojom::ValueDataView, base::Value>::binary_value(
231 *value);
232 }
233 static const base::ListValue& list_value(
234 const std::unique_ptr<base::Value>& value) {
235 return UnionTraits<common::mojom::ValueDataView, base::Value>::list_value(
236 *value);
237 }
238 static const base::DictionaryValue& dictionary_value(
239 const std::unique_ptr<base::Value>& value) {
240 return UnionTraits<common::mojom::ValueDataView,
241 base::Value>::dictionary_value(*value);
242 }
243
244 static bool Read(common::mojom::ValueDataView data,
245 std::unique_ptr<base::Value>* value);
246 };
247
248 } // namespace mojo
249
250 #endif // MOJO_COMMON_VALUES_STRUCT_TRAITS_H_
OLDNEW
« no previous file with comments | « mojo/common/values.typemap ('k') | mojo/common/values_struct_traits.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698