diff options
Diffstat (limited to 'tools/json_schema_compiler/util.h')
-rw-r--r-- | tools/json_schema_compiler/util.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/tools/json_schema_compiler/util.h b/tools/json_schema_compiler/util.h index c27e48a..59d65d0 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); |