diff options
Diffstat (limited to 'rest-api-templates/ari_model_validators.c.mustache')
-rw-r--r-- | rest-api-templates/ari_model_validators.c.mustache | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/rest-api-templates/ari_model_validators.c.mustache b/rest-api-templates/ari_model_validators.c.mustache new file mode 100644 index 000000000..0e87f8e24 --- /dev/null +++ b/rest-api-templates/ari_model_validators.c.mustache @@ -0,0 +1,117 @@ +/* + * Asterisk -- An open source telephony toolkit. + * + * Copyright (C) 2013, Digium, Inc. + * + * See http://www.asterisk.org for more information about + * the Asterisk project. Please do not directly contact + * any of the maintainers of this project for assistance; + * the project provides a web site, mailing lists and IRC + * channels for your use. + * + * This program is free software, distributed under the terms of + * the GNU General Public License Version 2. See the LICENSE file + * at the top of the source tree. + */ + +/*! \file + * + * \brief Generated file - Build validators for ARI model objects. + */ + + /* +{{> do-not-edit}} + * This file is generated by a mustache template. Please see the original + * template in rest-api-templates/ari_model_validators.h.mustache + */ + +#include "asterisk.h" + +ASTERISK_FILE_VERSION(__FILE__, "$Revision$") + +#include "asterisk/logger.h" +#include "asterisk/module.h" +#include "ari_model_validators.h" +{{#apis}} +{{#api_declaration}} +{{#models}} + +int ari_validate_{{c_id}}(struct ast_json *json) +{ + int res = 1; + struct ast_json_iter *iter; +{{#properties}} +{{#required}} + int has_{{name}} = 0; +{{/required}} +{{/properties}} +{{#has_subtypes}} + const char *discriminator; + + discriminator = ast_json_string_get(ast_json_object_get(json, "{{discriminator.name}}")); + if (!discriminator) { + ast_log(LOG_ERROR, "ARI {{id}} missing required field {{discriminator.name}}"); + return 0; + } + + if (strcmp("{{id}}", discriminator) == 0) { + /* Self type; fall through */ + } else +{{#subtypes}} + if (strcmp("{{id}}", discriminator) == 0) { + return ari_validate_{{c_id}}(json); + } else +{{/subtypes}} + { + ast_log(LOG_ERROR, "ARI {{id}} has undocumented subtype %s\n", + discriminator); + res = 0; + } +{{/has_subtypes}} + + for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) { +{{#properties}} + if (strcmp("{{name}}", ast_json_object_iter_key(iter)) == 0) { + int prop_is_valid; +{{#required}} + has_{{name}} = 1; +{{/required}} +{{#type}} +{{#is_list}} + prop_is_valid = ari_validate_list( + ast_json_object_iter_value(iter), + ari_validate_{{c_singular_name}}); +{{/is_list}} +{{^is_list}} + prop_is_valid = ari_validate_{{c_name}}( + ast_json_object_iter_value(iter)); +{{/is_list}} +{{/type}} + if (!prop_is_valid) { + ast_log(LOG_ERROR, "ARI {{id}} field {{name}} failed validation\n"); + res = 0; + } + } else +{{/properties}} + { + ast_log(LOG_ERROR, + "ARI {{id}} has undocumented field %s\n", + ast_json_object_iter_key(iter)); + res = 0; + } + } + +{{#properties}} +{{#required}} + if (!has_{{name}}) { + ast_log(LOG_ERROR, "ARI {{id}} missing required field {{name}}\n"); + res = 0; + } + +{{/required}} +{{/properties}} + return res; +} +{{/models}} +{{/api_declaration}} +{{/apis}} |