From 43005248c774daad9ea1bc601ca33bde33cc88e7 Mon Sep 17 00:00:00 2001 From: eeff <33566201+eeff@users.noreply.github.com> Date: Sun, 23 Apr 2023 12:15:26 +0800 Subject: [PATCH] feat: add template instantiation request json parser --- src/parser/neu_json_template.c | 54 ++++++++++++++++++++++++++++++++++ src/parser/neu_json_template.h | 9 ++++++ 2 files changed, 63 insertions(+) diff --git a/src/parser/neu_json_template.c b/src/parser/neu_json_template.c index a4b947e5..b88e5c53 100644 --- a/src/parser/neu_json_template.c +++ b/src/parser/neu_json_template.c @@ -620,3 +620,57 @@ void neu_json_decode_template_del_tags_req_free( free(req); } + +int neu_json_decode_template_inst_req(char * buf, + neu_json_template_inst_req_t **result) +{ + int ret = 0; + neu_json_template_inst_req_t *req = NULL; + void * json_obj = NULL; + + req = calloc(1, sizeof(*req)); + if (req == NULL) { + return -1; + } + + json_obj = neu_json_decode_new(buf); + if (NULL == json_obj) { + goto error; + } + + neu_json_elem_t req_elems[] = { + { + .name = "name", + .t = NEU_JSON_STR, + }, + { + .name = "node", + .t = NEU_JSON_STR, + }, + }; + ret = neu_json_decode_by_json(json_obj, NEU_JSON_ELEM_SIZE(req_elems), + req_elems); + req->name = req_elems[0].v.val_str; + req->node = req_elems[1].v.val_str; + if (ret != 0) { + goto error; + } + + *result = req; + neu_json_decode_free(json_obj); + return 0; + +error: + neu_json_decode_template_inst_req_free(req); + neu_json_decode_free(json_obj); + return -1; +} + +void neu_json_decode_template_inst_req_free(neu_json_template_inst_req_t *req) +{ + if (req) { + free(req->name); + free(req->node); + free(req); + } +} diff --git a/src/parser/neu_json_template.h b/src/parser/neu_json_template.h index e4cb7502..89296836 100644 --- a/src/parser/neu_json_template.h +++ b/src/parser/neu_json_template.h @@ -103,4 +103,13 @@ int neu_json_decode_template_del_tags_req( void neu_json_decode_template_del_tags_req_free( neu_json_template_del_tags_req_t *req); +typedef struct { + char *name; + char *node; +} neu_json_template_inst_req_t; + +int neu_json_decode_template_inst_req(char * buf, + neu_json_template_inst_req_t **result); +void neu_json_decode_template_inst_req_free(neu_json_template_inst_req_t *req); + #endif