asterisk/rest-api-templates/ari_model_validators.c.mustache
David M. Lee 32b4e79434 The Swagger 1.2 specification for type extension ended up being
slightly different than my proposal. Instead of putting an 'extends'
field on the subtype, the base type has a 'subTypes' field, which is a
list of the subTypes. Given that its a messaging model and not an
object model, kinda makes sense.

This patch changes the events.json api-doc, and the python translators
to take the new format into account.

Other changes that are in Swagger 1.2 were not adopted, since the spec
is still in flux, and could change before it's finalized.

A summary of changes to the Swagger-1.2 spec can be found at
https://github.com/wordnik/swagger-core/wiki/1.2-transition.

(closes issue ASTERISK-22440)
Review: https://reviewboard.asterisk.org/r/2909/
........

Merged revisions 401701 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@401834 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2013-10-24 20:48:17 +00:00

123 lines
2.8 KiB
Text

/*
* 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 ast_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
{{#all_subtypes}}
if (strcmp("{{id}}", discriminator) == 0) {
return ast_ari_validate_{{c_id}}(json);
} else
{{/all_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 = ast_ari_validate_list(
ast_json_object_iter_value(iter),
ast_ari_validate_{{c_singular_name}});
{{/is_list}}
{{^is_list}}
prop_is_valid = ast_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;
}
ari_validator ast_ari_validate_{{c_id}}_fn(void)
{
return ast_ari_validate_{{c_id}};
}
{{/models}}
{{/api_declaration}}
{{/apis}}