Home | History | Annotate | Download | only in json_schema_compiler
      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(base::Value::Type type) {
     74   switch(type) {
     75     case base::Value::TYPE_NULL:
     76       return "null";
     77     case base::Value::TYPE_BOOLEAN:
     78       return "boolean";
     79     case base::Value::TYPE_INTEGER:
     80       return "integer";
     81     case base::Value::TYPE_DOUBLE:
     82       return "number";
     83     case base::Value::TYPE_STRING:
     84       return "string";
     85     case base::Value::TYPE_BINARY:
     86       return "binary";
     87     case base::Value::TYPE_DICTIONARY:
     88       return "dictionary";
     89     case base::Value::TYPE_LIST:
     90       return "list";
     91   }
     92   NOTREACHED();
     93   return "";
     94 }
     95 
     96 }  // namespace api_util
     97 }  // namespace extensions
     98