| // Copyright 2012 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "tools/json_schema_compiler/util.h" |
| |
| #include "base/strings/stringprintf.h" |
| #include "base/strings/utf_string_conversions.h" |
| #include "base/values.h" |
| |
| namespace json_schema_compiler { |
| namespace util { |
| |
| namespace { |
| |
| bool ReportError(const base::Value& from, |
| base::Value::Type expected, |
| std::u16string& error) { |
| DCHECK(error.empty()); |
| error = base::ASCIIToUTF16(base::StringPrintf( |
| "expected %s, got %s", base::Value::GetTypeName(expected), |
| base::Value::GetTypeName(from.type()))); |
| return false; // Always false on purpose. |
| } |
| |
| } // namespace |
| |
| bool PopulateItem(const base::Value& from, int& out) { |
| if (!from.is_int()) { |
| return false; |
| } |
| out = from.GetInt(); |
| return true; |
| } |
| |
| bool PopulateItem(const base::Value& from, int& out, std::u16string& error) { |
| if (!PopulateItem(from, out)) |
| return ReportError(from, base::Value::Type::INTEGER, error); |
| return true; |
| } |
| |
| bool PopulateItem(const base::Value& from, bool& out) { |
| if (!from.is_bool()) { |
| return false; |
| } |
| out = from.GetBool(); |
| return true; |
| } |
| |
| bool PopulateItem(const base::Value& from, bool& out, std::u16string& error) { |
| if (!from.is_bool()) { |
| return ReportError(from, base::Value::Type::BOOLEAN, error); |
| } |
| |
| out = from.GetBool(); |
| return true; |
| } |
| |
| bool PopulateItem(const base::Value& from, double& out) { |
| if (!from.is_double()) { |
| return false; |
| } |
| out = from.GetDouble(); |
| return true; |
| } |
| |
| bool PopulateItem(const base::Value& from, double& out, std::u16string& error) { |
| if (!from.is_double()) { |
| return ReportError(from, base::Value::Type::DOUBLE, error); |
| } |
| |
| out = from.GetDouble(); |
| return true; |
| } |
| |
| bool PopulateItem(const base::Value& from, std::string& out) { |
| if (!from.is_string()) |
| return false; |
| out = from.GetString(); |
| return true; |
| } |
| |
| bool PopulateItem(const base::Value& from, |
| std::string& out, |
| std::u16string& error) { |
| if (!from.is_string()) { |
| return ReportError(from, base::Value::Type::STRING, error); |
| } |
| out = from.GetString(); |
| return true; |
| } |
| |
| bool PopulateItem(const base::Value& from, std::vector<uint8_t>& out) { |
| if (!from.is_blob()) { |
| return false; |
| } |
| out = from.GetBlob(); |
| return true; |
| } |
| |
| bool PopulateItem(const base::Value& from, |
| std::vector<uint8_t>& out, |
| std::u16string& error) { |
| if (!from.is_blob()) { |
| return ReportError(from, base::Value::Type::BINARY, error); |
| } |
| out = from.GetBlob(); |
| return true; |
| } |
| |
| bool PopulateItem(const base::Value& from, base::Value& out) { |
| out = from.Clone(); |
| return true; |
| } |
| |
| bool PopulateItem(const base::Value& from, |
| base::Value& out, |
| std::u16string& error) { |
| out = from.Clone(); |
| return true; |
| } |
| |
| void AddItemToList(const int from, base::Value::List& out) { |
| out.Append(from); |
| } |
| |
| void AddItemToList(const bool from, base::Value::List& out) { |
| out.Append(from); |
| } |
| |
| void AddItemToList(const double from, base::Value::List& out) { |
| out.Append(from); |
| } |
| |
| void AddItemToList(const std::string& from, base::Value::List& out) { |
| out.Append(from); |
| } |
| |
| void AddItemToList(const std::vector<uint8_t>& from, base::Value::List& out) { |
| out.Append(base::Value(from)); |
| } |
| |
| void AddItemToList(const base::Value& from, base::Value::List& out) { |
| out.Append(from.Clone()); |
| } |
| |
| } // namespace util |
| } // namespace json_schema_compiler |