diff options
author | Kinsey Moore <kmoore@digium.com> | 2013-05-14 12:47:52 +0000 |
---|---|---|
committer | Kinsey Moore <kmoore@digium.com> | 2013-05-14 12:47:52 +0000 |
commit | 2a9cbd693e2016ecaa1e2e31ca520a9dd48f0ca2 (patch) | |
tree | 097e84d7a4acba3a32abc585467cccfe90c94278 /rest-api-templates | |
parent | 54424c2ee2370d3d9dcb61ad438bc5d5ee2cbcdd (diff) |
Move JSON event generators into separate modules
This moves the JSON event generators out of the Stasis-HTTP modules and
into standalone JSON-related counterparts so that Stasis-HTTP and
res_stasis can depend on them without creating dependency cycles. This
also provides a future location for Swagger Model validator functions
once the generators for that code are written.
Review: https://reviewboard.asterisk.org/r/2534/
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@388668 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'rest-api-templates')
6 files changed, 251 insertions, 129 deletions
diff --git a/rest-api-templates/make_stasis_http_stubs.py b/rest-api-templates/make_stasis_http_stubs.py index 1ec7c5c91..1114ea46e 100755 --- a/rest-api-templates/make_stasis_http_stubs.py +++ b/rest-api-templates/make_stasis_http_stubs.py @@ -47,6 +47,12 @@ API_TRANSFORMS = [ 'stasis_http/resource_{{name}}.h'), Transform(rel('stasis_http_resource.c.mustache'), 'stasis_http/resource_{{name}}.c', False), + Transform(rel('res_stasis_json_resource.c.mustache'), + 'res_stasis_json_{{name}}.c'), + Transform(rel('res_stasis_json_resource.exports.mustache'), + 'res_stasis_json_{{name}}.exports.in'), + Transform(rel('stasis_json_resource.h.mustache'), + 'stasis_json/resource_{{name}}.h'), ] RESOURCES_TRANSFORMS = [ diff --git a/rest-api-templates/res_stasis_http_resource.c.mustache b/rest-api-templates/res_stasis_http_resource.c.mustache index a9428c060..cf2876c0c 100644 --- a/rest-api-templates/res_stasis_http_resource.c.mustache +++ b/rest-api-templates/res_stasis_http_resource.c.mustache @@ -49,9 +49,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/module.h" #include "asterisk/stasis_app.h" #include "stasis_http/resource_{{name}}.h" -{{#has_events}} -#include "asterisk/stasis_channels.h" -{{/has_events}} {{#apis}} {{#operations}} @@ -101,89 +98,6 @@ static void stasis_http_{{c_nickname}}_cb( {{> rest_handler}} {{/root_path}} -{{#has_events}} -{{#events}} -{{> event_function_decl}} - ) -{ - RAII_VAR(struct ast_json *, message, NULL, ast_json_unref); - RAII_VAR(struct ast_json *, event, NULL, ast_json_unref); -{{#has_properties}} - struct ast_json *validator; -{{/has_properties}} -{{#channel}} - int ret; -{{/channel}} -{{#bridge}} -{{^channel}} - int ret; -{{/channel}} -{{/bridge}} - -{{#channel}} - ast_assert(channel_snapshot != NULL); -{{/channel}} -{{#bridge}} - ast_assert(bridge_snapshot != NULL); -{{/bridge}} -{{#has_properties}} - ast_assert(blob != NULL); -{{#channel}} - ast_assert(ast_json_object_get(blob, "channel") == NULL); -{{/channel}} -{{#bridge}} - ast_assert(ast_json_object_get(blob, "bridge") == NULL); -{{/bridge}} - ast_assert(ast_json_object_get(blob, "type") == NULL); -{{#properties}} - - validator = ast_json_object_get(blob, "{{name}}"); - if (validator) { - /* do validation? XXX */ -{{#required}} - } else { - /* fail message generation if the required parameter doesn't exist */ - return NULL; -{{/required}} - } -{{/properties}} - - event = ast_json_deep_copy(blob); -{{/has_properties}} -{{^has_properties}} - - event = ast_json_object_create(); -{{/has_properties}} - if (!event) { - return NULL; - } - -{{#channel}} - ret = ast_json_object_set(event, - "channel", ast_channel_snapshot_to_json(channel_snapshot)); - if (ret) { - return NULL; - } - -{{/channel}} -{{#bridge}} - ret = ast_json_object_set(event, - "bridge", ast_bridge_snapshot_to_json(bridge_snapshot)); - if (ret) { - return NULL; - } - -{{/bridge}} - message = ast_json_pack("{s: o}", "{{c_id}}", ast_json_ref(event)); - if (!message) { - return NULL; - } - - return ast_json_ref(message); -} - -{{/events}} -{{/has_events}} static int load_module(void) { stasis_app_ref(); diff --git a/rest-api-templates/res_stasis_json_resource.c.mustache b/rest-api-templates/res_stasis_json_resource.c.mustache new file mode 100644 index 000000000..039830270 --- /dev/null +++ b/rest-api-templates/res_stasis_json_resource.c.mustache @@ -0,0 +1,151 @@ +{{#api_declaration}} +/* + * Asterisk -- An open source telephony toolkit. + * + * {{{copyright}}} + * + * {{{author}}} +{{! Template Copyright + * Copyright (C) 2013, Digium, Inc. + * + * Kinsey Moore <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. + */ + +{{! Template for rendering the res_ module for an HTTP resource. }} +/* +{{> do-not-edit}} + * This file is generated by a mustache template. Please see the original + * template in rest-api-templates/res_stasis_http_resource.c.mustache + */ + +/*! \file + * + * \brief {{{description}}} + * + * \author {{{author}}} + */ + +/*** MODULEINFO + <support_level>core</support_level> + ***/ + +#include "asterisk.h" + +ASTERISK_FILE_VERSION(__FILE__, "$Revision$") + +#include "asterisk/module.h" +#include "asterisk/json.h" +#include "stasis_json/resource_{{name}}.h" +{{#has_events}} +#include "asterisk/stasis_channels.h" + +{{#events}} +{{> event_function_decl}} + ) +{ + RAII_VAR(struct ast_json *, message, NULL, ast_json_unref); + RAII_VAR(struct ast_json *, event, NULL, ast_json_unref); +{{#has_properties}} + struct ast_json *validator; +{{/has_properties}} +{{#channel}} + int ret; +{{/channel}} +{{#bridge}} +{{^channel}} + int ret; +{{/channel}} +{{/bridge}} + +{{#channel}} + ast_assert(channel_snapshot != NULL); +{{/channel}} +{{#bridge}} + ast_assert(bridge_snapshot != NULL); +{{/bridge}} +{{#has_properties}} + ast_assert(blob != NULL); +{{#channel}} + ast_assert(ast_json_object_get(blob, "channel") == NULL); +{{/channel}} +{{#bridge}} + ast_assert(ast_json_object_get(blob, "bridge") == NULL); +{{/bridge}} + ast_assert(ast_json_object_get(blob, "type") == NULL); +{{#properties}} + + validator = ast_json_object_get(blob, "{{name}}"); + if (validator) { + /* do validation? XXX */ +{{#required}} + } else { + /* fail message generation if the required parameter doesn't exist */ + return NULL; +{{/required}} + } +{{/properties}} + + event = ast_json_deep_copy(blob); +{{/has_properties}} +{{^has_properties}} + + event = ast_json_object_create(); +{{/has_properties}} + if (!event) { + return NULL; + } + +{{#channel}} + ret = ast_json_object_set(event, + "channel", ast_channel_snapshot_to_json(channel_snapshot)); + if (ret) { + return NULL; + } + +{{/channel}} +{{#bridge}} + ret = ast_json_object_set(event, + "bridge", ast_bridge_snapshot_to_json(bridge_snapshot)); + if (ret) { + return NULL; + } + +{{/bridge}} + message = ast_json_pack("{s: o}", "{{c_id}}", ast_json_ref(event)); + if (!message) { + return NULL; + } + + return ast_json_ref(message); +} + +{{/events}} +{{/has_events}} +static int load_module(void) +{ + return 0; +} + +static int unload_module(void) +{ + return 0; +} + +AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, + "Stasis JSON Generators and Validators - {{{description}}}", + .load = load_module, + .unload = unload_module, + .load_pri = AST_MODPRI_DEFAULT, + ); +{{/api_declaration}} diff --git a/rest-api-templates/res_stasis_json_resource.exports.mustache b/rest-api-templates/res_stasis_json_resource.exports.mustache new file mode 100644 index 000000000..0f958fa04 --- /dev/null +++ b/rest-api-templates/res_stasis_json_resource.exports.mustache @@ -0,0 +1,12 @@ +{ +{{#api_declaration}} +{{#has_events}} + global: +{{#events}} + LINKER_SYMBOL_PREFIXstasis_json_event_{{c_id}}_create; +{{/events}} +{{/has_events}} +{{/api_declaration}} + local: + *; +}; diff --git a/rest-api-templates/stasis_http_resource.h.mustache b/rest-api-templates/stasis_http_resource.h.mustache index 2a417186c..6e7af1648 100644 --- a/rest-api-templates/stasis_http_resource.h.mustache +++ b/rest-api-templates/stasis_http_resource.h.mustache @@ -64,48 +64,5 @@ void stasis_http_{{c_nickname}}(struct ast_variable *headers, struct ast_{{c_nic {{/operations}} {{/apis}} -{{#has_events}} -struct ast_channel_snapshot; -struct ast_bridge_snapshot; - -{{#events}} -/*! - * \brief {{description}} -{{#notes}} - * - * {{{notes}}} -{{/notes}} - * -{{#channel}} - * \param channel {{#channel_desc}}{{channel_desc}}{{/channel_desc}}{{^channel_desc}}The channel to be used to generate this event{{/channel_desc}} -{{/channel}} -{{#bridge}} - * \param bridge {{#bridge_desc}}{{bridge_desc}}{{/bridge_desc}}{{^bridge_desc}}The bridge to be used to generate this event{{/bridge_desc}} -{{/bridge}} -{{#has_properties}} - * \param blob JSON blob containing the following parameters: -{{/has_properties}} -{{#properties}} - * - {{name}}: {{type}} {{#description}}- {{description}}{{/description}}{{#required}} (required){{/required}} -{{/properties}} - * - * \retval NULL on error - * \retval JSON (ast_json) describing the event - */ -{{> event_function_decl}} - ); - -{{/events}} -{{/has_events}} -/* - * JSON models - * -{{#models}} - * {{id}} -{{#properties}} - * - {{name}}: {{type}}{{#required}} (required){{/required}} -{{/properties}} -{{/models}} */ - #endif /* _ASTERISK_RESOURCE_{{name_caps}}_H */ {{/api_declaration}} diff --git a/rest-api-templates/stasis_json_resource.h.mustache b/rest-api-templates/stasis_json_resource.h.mustache new file mode 100644 index 000000000..f55e830bd --- /dev/null +++ b/rest-api-templates/stasis_json_resource.h.mustache @@ -0,0 +1,82 @@ +{{#api_declaration}} +/* + * Asterisk -- An open source telephony toolkit. + * + * {{{copyright}}} + * + * {{{author}}} + * + * 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 - declares stubs to be implemented in + * res/stasis_json/resource_{{name}}.c + * + * {{{description}}} + * + * \author {{{author}}} + */ + +/* +{{> do-not-edit}} + * This file is generated by a mustache template. Please see the original + * template in rest-api-templates/stasis_http_resource.h.mustache + */ + +#ifndef _ASTERISK_RESOURCE_{{name_caps}}_H +#define _ASTERISK_RESOURCE_{{name_caps}}_H + +{{#has_events}} +struct ast_channel_snapshot; + +{{#events}} +/*! + * \brief {{description}} +{{#notes}} + * + * {{{notes}}} +{{/notes}} + * +{{#channel}} + * \param channel {{#channel_desc}}{{channel_desc}}{{/channel_desc}}{{^channel_desc}}The channel to be used to generate this event{{/channel_desc}} +{{/channel}} +{{#bridge}} + * \param bridge {{#bridge_desc}}{{bridge_desc}}{{/bridge_desc}}{{^bridge_desc}}The bridge to be used to generate this event{{/bridge_desc}} +{{/bridge}} +{{#has_properties}} + * \param blob JSON blob containing the following parameters: +{{/has_properties}} +{{#properties}} + * - {{name}}: {{type}} {{#description}}- {{description}}{{/description}}{{#required}} (required){{/required}} +{{/properties}} + * + * \retval NULL on error + * \retval JSON (ast_json) describing the event + */ +{{> event_function_decl}} + ); + +{{/events}} +{{/has_events}} +/* + * JSON models + * +{{#models}} + * {{id}} +{{#properties}} + * - {{name}}: {{type}}{{#required}} (required){{/required}} +{{/properties}} +{{/models}} */ + +#endif /* _ASTERISK_RESOURCE_{{name_caps}}_H */ +{{/api_declaration}} |