summaryrefslogtreecommitdiff
path: root/rest-api-templates
diff options
context:
space:
mode:
authorKinsey Moore <kmoore@digium.com>2013-05-14 12:47:52 +0000
committerKinsey Moore <kmoore@digium.com>2013-05-14 12:47:52 +0000
commit2a9cbd693e2016ecaa1e2e31ca520a9dd48f0ca2 (patch)
tree097e84d7a4acba3a32abc585467cccfe90c94278 /rest-api-templates
parent54424c2ee2370d3d9dcb61ad438bc5d5ee2cbcdd (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')
-rwxr-xr-xrest-api-templates/make_stasis_http_stubs.py6
-rw-r--r--rest-api-templates/res_stasis_http_resource.c.mustache86
-rw-r--r--rest-api-templates/res_stasis_json_resource.c.mustache151
-rw-r--r--rest-api-templates/res_stasis_json_resource.exports.mustache12
-rw-r--r--rest-api-templates/stasis_http_resource.h.mustache43
-rw-r--r--rest-api-templates/stasis_json_resource.h.mustache82
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}}