Index: tools/json_schema_compiler/util.cc |
diff --git a/tools/json_schema_compiler/util.cc b/tools/json_schema_compiler/util.cc |
index 3e36cfc7a6957c7226fa0c5b2b10e78a7a6a104e..b7c4eccae1441b2bf585c9ad9f567440bf776988 100644 |
--- a/tools/json_schema_compiler/util.cc |
+++ b/tools/json_schema_compiler/util.cc |
@@ -5,6 +5,7 @@ |
#include "tools/json_schema_compiler/util.h" |
#include "base/stl_util.h" |
+#include "base/strings/utf_string_conversions.h" |
#include "base/values.h" |
namespace json_schema_compiler { |
@@ -14,18 +15,68 @@ bool PopulateItem(const base::Value& from, int* out) { |
return from.GetAsInteger(out); |
} |
+bool PopulateItem(const base::Value& from, int* out, base::string16* error) { |
+ if (!from.GetAsInteger(out)) { |
+ if (error->length()) { |
+ error->append(base::UTF8ToUTF16("; ")); |
+ } |
+ error->append(base::UTF8ToUTF16("expected integer, got " + |
+ ValueTypeToString(from.GetType()))); |
+ return false; |
+ } |
+ return true; |
+} |
+ |
bool PopulateItem(const base::Value& from, bool* out) { |
return from.GetAsBoolean(out); |
} |
+bool PopulateItem(const base::Value& from, bool* out, base::string16* error) { |
+ if (!from.GetAsBoolean(out)) { |
+ if (error->length()) { |
+ error->append(base::UTF8ToUTF16("; ")); |
+ } |
+ error->append(base::UTF8ToUTF16("expected boolean, got " + |
+ ValueTypeToString(from.GetType()))); |
+ return false; |
+ } |
+ return true; |
+} |
+ |
bool PopulateItem(const base::Value& from, double* out) { |
return from.GetAsDouble(out); |
} |
+bool PopulateItem(const base::Value& from, double* out, base::string16* error) { |
+ if (!from.GetAsDouble(out)) { |
+ if (error->length()) { |
+ error->append(base::UTF8ToUTF16("; ")); |
+ } |
+ error->append(base::UTF8ToUTF16("expected double, got " + |
+ ValueTypeToString(from.GetType()))); |
+ return false; |
+ } |
+ return true; |
+} |
+ |
bool PopulateItem(const base::Value& from, std::string* out) { |
return from.GetAsString(out); |
} |
+bool PopulateItem(const base::Value& from, |
+ std::string* out, |
+ base::string16* error) { |
+ if (!from.GetAsString(out)) { |
+ if (error->length()) { |
+ error->append(base::UTF8ToUTF16("; ")); |
+ } |
+ error->append(base::UTF8ToUTF16("expected string, got " + |
+ ValueTypeToString(from.GetType()))); |
+ return false; |
+ } |
+ return true; |
+} |
+ |
bool PopulateItem(const base::Value& from, std::vector<char>* out) { |
const base::BinaryValue* binary = nullptr; |
if (!from.GetAsBinary(&binary)) |
@@ -34,12 +85,35 @@ bool PopulateItem(const base::Value& from, std::vector<char>* out) { |
return true; |
} |
+bool PopulateItem(const base::Value& from, |
+ std::vector<char>* out, |
+ base::string16* error) { |
+ const base::BinaryValue* binary = nullptr; |
+ if (!from.GetAsBinary(&binary)) { |
+ if (error->length()) { |
+ error->append(base::UTF8ToUTF16("; ")); |
+ } |
+ error->append(base::UTF8ToUTF16("expected binary, got " + |
+ ValueTypeToString(from.GetType()))); |
+ return false; |
+ } |
+ out->assign(binary->GetBuffer(), binary->GetBuffer() + binary->GetSize()); |
+ return true; |
+} |
+ |
bool PopulateItem(const base::Value& from, linked_ptr<base::Value>* out) { |
*out = make_linked_ptr(from.DeepCopy()); |
return true; |
} |
bool PopulateItem(const base::Value& from, |
+ linked_ptr<base::Value>* out, |
+ base::string16* error) { |
+ *out = make_linked_ptr(from.DeepCopy()); |
+ return true; |
+} |
+ |
+bool PopulateItem(const base::Value& from, |
linked_ptr<base::DictionaryValue>* out) { |
const base::DictionaryValue* dict = nullptr; |
if (!from.GetAsDictionary(&dict)) |
@@ -48,6 +122,22 @@ bool PopulateItem(const base::Value& from, |
return true; |
} |
+bool PopulateItem(const base::Value& from, |
+ linked_ptr<base::DictionaryValue>* out, |
+ base::string16* error) { |
+ const base::DictionaryValue* dict = nullptr; |
+ if (!from.GetAsDictionary(&dict)) { |
+ if (error->length()) { |
+ error->append(base::UTF8ToUTF16("; ")); |
+ } |
+ error->append(base::UTF8ToUTF16("expected dictionary, got " + |
+ ValueTypeToString(from.GetType()))); |
+ return false; |
+ } |
+ *out = make_linked_ptr(dict->DeepCopy()); |
+ return true; |
+} |
+ |
void AddItemToList(const int from, base::ListValue* out) { |
out->Append(new base::FundamentalValue(from)); |
} |