1 // Copyright (c) 2012 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 "tools/json_schema_compiler/util.h" 6 7 #include "base/values.h" 8 9 namespace json_schema_compiler { 10 namespace util { 11 12 bool GetItemFromList(const base::ListValue& from, int index, int* out) { 13 return from.GetInteger(index, out); 14 } 15 16 bool GetItemFromList(const base::ListValue& from, int index, bool* out) { 17 return from.GetBoolean(index, out); 18 } 19 20 bool GetItemFromList(const base::ListValue& from, int index, double* out) { 21 return from.GetDouble(index, out); 22 } 23 24 bool GetItemFromList(const base::ListValue& from, int index, std::string* out) { 25 return from.GetString(index, out); 26 } 27 28 bool GetItemFromList(const base::ListValue& from, 29 int index, 30 linked_ptr<base::Value>* out) { 31 const base::Value* value = NULL; 32 if (!from.Get(index, &value)) 33 return false; 34 *out = make_linked_ptr(value->DeepCopy()); 35 return true; 36 } 37 38 bool GetItemFromList(const base::ListValue& from, int index, 39 linked_ptr<base::DictionaryValue>* out) { 40 const base::DictionaryValue* dict = NULL; 41 if (!from.GetDictionary(index, &dict)) 42 return false; 43 *out = make_linked_ptr(dict->DeepCopy()); 44 return true; 45 } 46 47 void AddItemToList(const int from, base::ListValue* out) { 48 out->Append(new base::FundamentalValue(from)); 49 } 50 51 void AddItemToList(const bool from, base::ListValue* out) { 52 out->Append(new base::FundamentalValue(from)); 53 } 54 55 void AddItemToList(const double from, base::ListValue* out) { 56 out->Append(new base::FundamentalValue(from)); 57 } 58 59 void AddItemToList(const std::string& from, base::ListValue* out) { 60 out->Append(new base::StringValue(from)); 61 } 62 63 void AddItemToList(const linked_ptr<base::Value>& from, 64 base::ListValue* out) { 65 out->Append(from->DeepCopy()); 66 } 67 68 void AddItemToList(const linked_ptr<base::DictionaryValue>& from, 69 base::ListValue* out) { 70 out->Append(static_cast<base::Value*>(from->DeepCopy())); 71 } 72 73 std::string ValueTypeToString(Value::Type type) { 74 switch(type) { 75 case Value::TYPE_NULL: 76 return "null"; 77 case Value::TYPE_BOOLEAN: 78 return "boolean"; 79 case Value::TYPE_INTEGER: 80 return "integer"; 81 case Value::TYPE_DOUBLE: 82 return "number"; 83 case Value::TYPE_STRING: 84 return "string"; 85 case Value::TYPE_BINARY: 86 return "binary"; 87 case Value::TYPE_DICTIONARY: 88 return "dictionary"; 89 case Value::TYPE_LIST: 90 return "list"; 91 } 92 NOTREACHED(); 93 return ""; 94 } 95 96 } // namespace api_util 97 } // namespace extensions 98