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
9namespace json_schema_compiler {
10namespace util {
11
12bool GetItemFromList(const base::ListValue& from, int index, int* out) {
13  return from.GetInteger(index, out);
14}
15
16bool GetItemFromList(const base::ListValue& from, int index, bool* out) {
17  return from.GetBoolean(index, out);
18}
19
20bool GetItemFromList(const base::ListValue& from, int index, double* out) {
21  return from.GetDouble(index, out);
22}
23
24bool GetItemFromList(const base::ListValue& from, int index, std::string* out) {
25  return from.GetString(index, out);
26}
27
28bool 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
38bool 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
47void AddItemToList(const int from, base::ListValue* out) {
48  out->Append(new base::FundamentalValue(from));
49}
50
51void AddItemToList(const bool from, base::ListValue* out) {
52  out->Append(new base::FundamentalValue(from));
53}
54
55void AddItemToList(const double from, base::ListValue* out) {
56  out->Append(new base::FundamentalValue(from));
57}
58
59void AddItemToList(const std::string& from, base::ListValue* out) {
60  out->Append(new base::StringValue(from));
61}
62
63void AddItemToList(const linked_ptr<base::Value>& from,
64                   base::ListValue* out) {
65  out->Append(from->DeepCopy());
66}
67
68void AddItemToList(const linked_ptr<base::DictionaryValue>& from,
69                   base::ListValue* out) {
70  out->Append(static_cast<base::Value*>(from->DeepCopy()));
71}
72
73std::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