summaryrefslogtreecommitdiffstats
path: root/tools/json_schema_compiler/util.cc
diff options
context:
space:
mode:
Diffstat (limited to 'tools/json_schema_compiler/util.cc')
-rw-r--r--tools/json_schema_compiler/util.cc90
1 files changed, 90 insertions, 0 deletions
diff --git a/tools/json_schema_compiler/util.cc b/tools/json_schema_compiler/util.cc
index 3e36cfc..b7c4ecc 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));
}