asterisk/rest-api-templates/body_parsing.mustache

72 lines
2.0 KiB
Plaintext

{{!
* Asterisk -- An open source telephony toolkit.
*
* Copyright (C) 2014, Digium, Inc.
*
* William Kinsey Moore, III <kmoore@digium.com>
*
* 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.
}}
{{!
* Snippet for decoding parameters into an _args struct.
}}
{{#parse_body}}
int ast_ari_{{c_name}}_{{c_nickname}}_parse_body(
struct ast_json *body,
struct ast_ari_{{c_name}}_{{c_nickname}}_args *args)
{
{{#has_query_parameters}}
struct ast_json *field;
{{/has_query_parameters}}
/* Parse query parameters out of it */
{{#query_parameters}}
{{^is_body_parameter}}
field = ast_json_object_get(body, "{{name}}");
if (field) {
{{^allow_multiple}}
args->{{c_name}} = {{json_convert}}(field);
{{/allow_multiple}}
{{#allow_multiple}}
/* If they were silly enough to both pass in a query param and a
* JSON body, free up the query value.
*/
ast_free(args->{{c_name}});
if (ast_json_typeof(field) == AST_JSON_ARRAY) {
/* Multiple param passed as array */
size_t i;
args->{{c_name}}_count = ast_json_array_size(field);
args->{{c_name}} = ast_malloc(sizeof(*args->{{c_name}}) * args->{{c_name}}_count);
if (!args->{{c_name}}) {
return -1;
}
for (i = 0; i < args->{{c_name}}_count; ++i) {
args->{{c_name}}[i] = {{json_convert}}(ast_json_array_get(field, i));
}
} else {
/* Multiple param passed as single value */
args->{{c_name}}_count = 1;
args->{{c_name}} = ast_malloc(sizeof(*args->{{c_name}}) * args->{{c_name}}_count);
if (!args->{{c_name}}) {
return -1;
}
args->{{c_name}}[0] = {{json_convert}}(field);
}
{{/allow_multiple}}
}
{{/is_body_parameter}}
{{/query_parameters}}
return 0;
}
{{/parse_body}}