| Index: tools/json_schema_compiler/util.h
|
| diff --git a/tools/json_schema_compiler/util.h b/tools/json_schema_compiler/util.h
|
| index c27e48adfc9762d15907c257ae2c2091d6b3d1d7..59d65d01031d8ea9879da482e5bcc5fafc3180db 100644
|
| --- a/tools/json_schema_compiler/util.h
|
| +++ b/tools/json_schema_compiler/util.h
|
| @@ -18,14 +18,31 @@ namespace util {
|
|
|
| // Populates the item |out| from the value |from|. These are used by template
|
| // specializations of |Get(Optional)ArrayFromList|.
|
| +bool PopulateItem(const base::Value& from, linked_ptr<base::Value>* out);
|
| +
|
| bool PopulateItem(const base::Value& from, int* out);
|
| +bool PopulateItem(const base::Value& from, int* out, base::string16* error);
|
| bool PopulateItem(const base::Value& from, bool* out);
|
| +bool PopulateItem(const base::Value& from, bool* out, base::string16* error);
|
| bool PopulateItem(const base::Value& from, double* out);
|
| +bool PopulateItem(const base::Value& from, double* out, base::string16* error);
|
| bool PopulateItem(const base::Value& from, std::string* out);
|
| +bool PopulateItem(const base::Value& from,
|
| + std::string* out,
|
| + base::string16* error);
|
| bool PopulateItem(const base::Value& from, std::vector<char>* out);
|
| +bool PopulateItem(const base::Value& from,
|
| + std::vector<char>* out,
|
| + base::string16* error);
|
| +bool PopulateItem(const base::Value& from,
|
| + linked_ptr<base::Value>* out,
|
| + base::string16* error);
|
| bool PopulateItem(const base::Value& from, linked_ptr<base::Value>* out);
|
| bool PopulateItem(const base::Value& from,
|
| linked_ptr<base::DictionaryValue>* out);
|
| +bool PopulateItem(const base::Value& from,
|
| + linked_ptr<base::DictionaryValue>* out,
|
| + base::string16* error);
|
|
|
| // This template is used for types generated by tools/json_schema_compiler.
|
| template <class T>
|
| @@ -40,6 +57,22 @@ bool PopulateItem(const base::Value& from, linked_ptr<T>* out) {
|
| return true;
|
| }
|
|
|
| +// This template is used for types generated by tools/json_schema_compiler with
|
| +// error generation enabled.
|
| +template <class T>
|
| +bool PopulateItem(const base::Value& from,
|
| + linked_ptr<T>* out,
|
| + base::string16* error) {
|
| + const base::DictionaryValue* dict = nullptr;
|
| + if (!from.GetAsDictionary(&dict))
|
| + return false;
|
| + scoped_ptr<T> obj(new T());
|
| + if (!T::Populate(*dict, obj.get(), error))
|
| + return false;
|
| + *out = linked_ptr<T>(obj.release());
|
| + return true;
|
| +}
|
| +
|
| // Populates |out| with |list|. Returns false if there is no list at the
|
| // specified key or if the list has anything other than |T|.
|
| template <class T>
|
| @@ -55,6 +88,23 @@ bool PopulateArrayFromList(const base::ListValue& list, std::vector<T>* out) {
|
| return true;
|
| }
|
|
|
| +// Populates |out| with |list|. Returns false and sets |error| if there is no
|
| +// list at the specified key or if the list has anything other than |T|.
|
| +template <class T>
|
| +bool PopulateArrayFromList(const base::ListValue& list,
|
| + std::vector<T>* out,
|
| + base::string16* error) {
|
| + out->clear();
|
| + T item;
|
| + for (const base::Value* value : list) {
|
| + if (!PopulateItem(*value, &item, error))
|
| + return false;
|
| + out->push_back(item);
|
| + }
|
| +
|
| + return true;
|
| +}
|
| +
|
| // Creates a new vector containing |list| at |out|. Returns
|
| // true on success or if there is nothing at the specified key. Returns false
|
| // if anything other than a list of |T| is at the specified key.
|
| @@ -69,6 +119,18 @@ bool PopulateOptionalArrayFromList(const base::ListValue& list,
|
| return true;
|
| }
|
|
|
| +template <class T>
|
| +bool PopulateOptionalArrayFromList(const base::ListValue& list,
|
| + scoped_ptr<std::vector<T>>* out,
|
| + base::string16* error) {
|
| + out->reset(new std::vector<T>());
|
| + if (!PopulateArrayFromList(list, out->get(), error)) {
|
| + out->reset();
|
| + return false;
|
| + }
|
| + return true;
|
| +}
|
| +
|
| // Appends a Value newly created from |from| to |out|. These used by template
|
| // specializations of |Set(Optional)ArrayToList|.
|
| void AddItemToList(const int from, base::ListValue* out);
|
|
|