summaryrefslogtreecommitdiff
path: root/rest-api-templates/param_parsing.mustache
diff options
context:
space:
mode:
Diffstat (limited to 'rest-api-templates/param_parsing.mustache')
-rw-r--r--rest-api-templates/param_parsing.mustache42
1 files changed, 37 insertions, 5 deletions
diff --git a/rest-api-templates/param_parsing.mustache b/rest-api-templates/param_parsing.mustache
index d43dcdce2..59c59e958 100644
--- a/rest-api-templates/param_parsing.mustache
+++ b/rest-api-templates/param_parsing.mustache
@@ -18,15 +18,48 @@
{{!
* Snippet for decoding parameters into an _args struct.
}}
- struct ast_{{c_nickname}}_args args = {};
-{{#has_parameters}}
- struct ast_variable *i;
-
{{#has_query_parameters}}
for (i = get_params; i; i = i->next) {
{{#query_parameters}}
if (strcmp(i->name, "{{name}}") == 0) {
+{{^allow_multiple}}
args.{{c_name}} = {{c_convert}}(i->value);
+{{/allow_multiple}}
+{{#allow_multiple}}
+ /* Parse comma separated list */
+ char *vals[MAX_VALS];
+ size_t j;
+
+ args.{{c_name}}_parse = ast_strdup(i->value);
+ if (!args.{{c_name}}_parse) {
+ ast_ari_response_alloc_failed(response);
+ goto fin;
+ }
+
+ args.{{c_name}}_count = ast_app_separate_args(
+ args.{{c_name}}_parse, ',', vals, ARRAY_LEN(vals));
+ if (args.{{c_name}}_count == 0) {
+ ast_ari_response_alloc_failed(response);
+ goto fin;
+ }
+
+ if (args.{{c_name}}_count >= MAX_VALS) {
+ ast_ari_response_error(response, 400,
+ "Bad Request",
+ "Too many values for {{c_name}}");
+ goto fin;
+ }
+
+ args.{{c_name}} = ast_malloc(sizeof(*args.{{c_name}}) * args.{{c_name}}_count);
+ if (!args.{{c_name}}) {
+ ast_ari_response_alloc_failed(response);
+ goto fin;
+ }
+
+ for (j = 0; j < args.{{c_name}}_count; ++j) {
+ args.{{c_name}}[j] = {{c_convert}}(vals[j]);
+ }
+{{/allow_multiple}}
} else
{{/query_parameters}}
{}
@@ -42,4 +75,3 @@
{}
}
{{/has_path_parameters}}
-{{/has_parameters}}