
Helpfully removes uses of DictionaryValue::CreateDeepCopy() Bug: 1187059 Change-Id: I3d575bf1963ef6bbf0f7b110198ae964c4dbb070 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3385258 Auto-Submit: Austin Sullivan <asully@chromium.org> Reviewed-by: Devlin Cronin <rdevlin.cronin@chromium.org> Commit-Queue: Devlin Cronin <rdevlin.cronin@chromium.org> Cr-Commit-Position: refs/heads/main@{#960761}
146 lines
3.7 KiB
C++
146 lines
3.7 KiB
C++
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
|
// 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 (out && from.is_int()) {
|
|
*out = from.GetInt();
|
|
return true;
|
|
}
|
|
return from.is_int();
|
|
}
|
|
|
|
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 (out && from.is_bool()) {
|
|
*out = from.GetBool();
|
|
return true;
|
|
}
|
|
return from.is_bool();
|
|
}
|
|
|
|
bool PopulateItem(const base::Value& from, bool* out, std::u16string* error) {
|
|
if (!from.is_bool())
|
|
return ReportError(from, base::Value::Type::BOOLEAN, error);
|
|
if (out)
|
|
*out = from.GetBool();
|
|
return true;
|
|
}
|
|
|
|
bool PopulateItem(const base::Value& from, double* out) {
|
|
absl::optional<double> maybe_double = from.GetIfDouble();
|
|
if (maybe_double.has_value()) {
|
|
if (out)
|
|
*out = maybe_double.value();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
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, std::unique_ptr<base::Value>* out) {
|
|
*out = base::Value::ToUniquePtrValue(from.Clone());
|
|
return true;
|
|
}
|
|
|
|
bool PopulateItem(const base::Value& from,
|
|
std::unique_ptr<base::Value>* out,
|
|
std::u16string* error) {
|
|
*out = base::Value::ToUniquePtrValue(from.Clone());
|
|
return true;
|
|
}
|
|
|
|
void AddItemToList(const int from, base::ListValue* out) {
|
|
out->Append(from);
|
|
}
|
|
|
|
void AddItemToList(const bool from, base::ListValue* out) {
|
|
out->Append(from);
|
|
}
|
|
|
|
void AddItemToList(const double from, base::ListValue* out) {
|
|
out->Append(from);
|
|
}
|
|
|
|
void AddItemToList(const std::string& from, base::ListValue* out) {
|
|
out->Append(from);
|
|
}
|
|
|
|
void AddItemToList(const std::vector<uint8_t>& from, base::ListValue* out) {
|
|
out->Append(base::Value(from));
|
|
}
|
|
|
|
void AddItemToList(const std::unique_ptr<base::Value>& from,
|
|
base::ListValue* out) {
|
|
out->Append(from->Clone());
|
|
}
|
|
|
|
} // namespace util
|
|
} // namespace json_schema_compiler
|