OLD | NEW |
(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 {{"_".join(config.protocol.namespace)}}_ValueConversions_h |
| 6 #define {{"_".join(config.protocol.namespace)}}_ValueConversions_h |
| 7 |
| 8 //#include "ErrorSupport.h" |
| 9 //#include "Forward.h" |
| 10 //#include "Values.h" |
| 11 |
| 12 {% for namespace in config.protocol.namespace %} |
| 13 namespace {{namespace}} { |
| 14 {% endfor %} |
| 15 |
| 16 template<typename T> |
| 17 struct ValueConversions { |
| 18 static std::unique_ptr<T> parse(protocol::Value* value, ErrorSupport* errors
) |
| 19 { |
| 20 return T::parse(value, errors); |
| 21 } |
| 22 |
| 23 static std::unique_ptr<protocol::Value> serialize(T* value) |
| 24 { |
| 25 return value->serialize(); |
| 26 } |
| 27 |
| 28 static std::unique_ptr<protocol::Value> serialize(const std::unique_ptr<T>&
value) |
| 29 { |
| 30 return value->serialize(); |
| 31 } |
| 32 }; |
| 33 |
| 34 template<> |
| 35 struct ValueConversions<bool> { |
| 36 static bool parse(protocol::Value* value, ErrorSupport* errors) |
| 37 { |
| 38 bool result = false; |
| 39 bool success = value ? value->asBoolean(&result) : false; |
| 40 if (!success) |
| 41 errors->addError("boolean value expected"); |
| 42 return result; |
| 43 } |
| 44 |
| 45 static std::unique_ptr<protocol::Value> serialize(bool value) |
| 46 { |
| 47 return FundamentalValue::create(value); |
| 48 } |
| 49 }; |
| 50 |
| 51 template<> |
| 52 struct ValueConversions<int> { |
| 53 static int parse(protocol::Value* value, ErrorSupport* errors) |
| 54 { |
| 55 int result = 0; |
| 56 bool success = value ? value->asInteger(&result) : false; |
| 57 if (!success) |
| 58 errors->addError("integer value expected"); |
| 59 return result; |
| 60 } |
| 61 |
| 62 static std::unique_ptr<protocol::Value> serialize(int value) |
| 63 { |
| 64 return FundamentalValue::create(value); |
| 65 } |
| 66 }; |
| 67 |
| 68 template<> |
| 69 struct ValueConversions<double> { |
| 70 static double parse(protocol::Value* value, ErrorSupport* errors) |
| 71 { |
| 72 double result = 0; |
| 73 bool success = value ? value->asDouble(&result) : false; |
| 74 if (!success) |
| 75 errors->addError("double value expected"); |
| 76 return result; |
| 77 } |
| 78 |
| 79 static std::unique_ptr<protocol::Value> serialize(double value) |
| 80 { |
| 81 return FundamentalValue::create(value); |
| 82 } |
| 83 }; |
| 84 |
| 85 template<> |
| 86 struct ValueConversions<String> { |
| 87 static String parse(protocol::Value* value, ErrorSupport* errors) |
| 88 { |
| 89 String result; |
| 90 bool success = value ? value->asString(&result) : false; |
| 91 if (!success) |
| 92 errors->addError("string value expected"); |
| 93 return result; |
| 94 } |
| 95 |
| 96 static std::unique_ptr<protocol::Value> serialize(const String& value) |
| 97 { |
| 98 return StringValue::create(value); |
| 99 } |
| 100 }; |
| 101 |
| 102 template<> |
| 103 struct ValueConversions<Value> { |
| 104 static std::unique_ptr<Value> parse(protocol::Value* value, ErrorSupport* er
rors) |
| 105 { |
| 106 bool success = !!value; |
| 107 if (!success) { |
| 108 errors->addError("value expected"); |
| 109 return nullptr; |
| 110 } |
| 111 return value->clone(); |
| 112 } |
| 113 |
| 114 static std::unique_ptr<protocol::Value> serialize(Value* value) |
| 115 { |
| 116 return value->clone(); |
| 117 } |
| 118 |
| 119 static std::unique_ptr<protocol::Value> serialize(const std::unique_ptr<Valu
e>& value) |
| 120 { |
| 121 return value->clone(); |
| 122 } |
| 123 }; |
| 124 |
| 125 template<> |
| 126 struct ValueConversions<DictionaryValue> { |
| 127 static std::unique_ptr<DictionaryValue> parse(protocol::Value* value, ErrorS
upport* errors) |
| 128 { |
| 129 bool success = value && value->type() == protocol::Value::TypeObject; |
| 130 if (!success) |
| 131 errors->addError("object expected"); |
| 132 return DictionaryValue::cast(value->clone()); |
| 133 } |
| 134 |
| 135 static std::unique_ptr<protocol::Value> serialize(DictionaryValue* value) |
| 136 { |
| 137 return value->clone(); |
| 138 } |
| 139 |
| 140 static std::unique_ptr<protocol::Value> serialize(const std::unique_ptr<Dict
ionaryValue>& value) |
| 141 { |
| 142 return value->clone(); |
| 143 } |
| 144 }; |
| 145 |
| 146 template<> |
| 147 struct ValueConversions<ListValue> { |
| 148 static std::unique_ptr<ListValue> parse(protocol::Value* value, ErrorSupport
* errors) |
| 149 { |
| 150 bool success = value && value->type() == protocol::Value::TypeArray; |
| 151 if (!success) |
| 152 errors->addError("list expected"); |
| 153 return ListValue::cast(value->clone()); |
| 154 } |
| 155 |
| 156 static std::unique_ptr<protocol::Value> serialize(ListValue* value) |
| 157 { |
| 158 return value->clone(); |
| 159 } |
| 160 |
| 161 static std::unique_ptr<protocol::Value> serialize(const std::unique_ptr<List
Value>& value) |
| 162 { |
| 163 return value->clone(); |
| 164 } |
| 165 }; |
| 166 |
| 167 {% for namespace in config.protocol.namespace %} |
| 168 } // namespace {{namespace}} |
| 169 {% endfor %} |
| 170 |
| 171 #endif // !defined({{"_".join(config.protocol.namespace)}}_ValueConversions_h) |
OLD | NEW |