From 40025265f236f89b31bc2200dcea4deac3cc2a56 Mon Sep 17 00:00:00 2001 From: eeff <33566201+eeff@users.noreply.github.com> Date: Wed, 3 Jan 2024 17:13:42 +0800 Subject: [PATCH] feat(restful): read group handler support query --- include/neuron/json/neu_json_rw.h | 2 ++ plugins/restful/rw_handle.c | 2 ++ src/parser/neu_json_rw.c | 30 ++++++++++++++++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/include/neuron/json/neu_json_rw.h b/include/neuron/json/neu_json_rw.h index bd84c2c1..e45747fa 100644 --- a/include/neuron/json/neu_json_rw.h +++ b/include/neuron/json/neu_json_rw.h @@ -126,6 +126,8 @@ void neu_json_decode_write_free(neu_json_write_t *req); typedef struct { char *group; char *node; + char *name; + char *desc; bool sync; } neu_json_read_req_t; diff --git a/plugins/restful/rw_handle.c b/plugins/restful/rw_handle.c index 22bc6beb..0c743ae7 100644 --- a/plugins/restful/rw_handle.c +++ b/plugins/restful/rw_handle.c @@ -43,6 +43,8 @@ void handle_read(nng_aio *aio) cmd.driver = req->node; cmd.group = req->group; + cmd.name = req->name; + cmd.desc = req->desc; cmd.sync = req->sync; req->node = NULL; req->group = NULL; diff --git a/src/parser/neu_json_rw.c b/src/parser/neu_json_rw.c index 719afac4..344ea14a 100644 --- a/src/parser/neu_json_rw.c +++ b/src/parser/neu_json_rw.c @@ -430,6 +430,11 @@ int neu_json_decode_read_req(char *buf, neu_json_read_req_t **result) .t = NEU_JSON_BOOL, .attribute = NEU_JSON_ATTRIBUTE_OPTIONAL, }, + { + .name = "query", + .t = NEU_JSON_OBJECT, + .attribute = NEU_JSON_ATTRIBUTE_OPTIONAL, + }, }; ret = neu_json_decode_by_json(json_obj, NEU_JSON_ELEM_SIZE(req_elems), req_elems); @@ -441,11 +446,36 @@ int neu_json_decode_read_req(char *buf, neu_json_read_req_t **result) req->group = req_elems[1].v.val_str; req->sync = req_elems[2].v.val_bool; + neu_json_elem_t query_elems[] = { + { + .name = "name", + .t = NEU_JSON_STR, + .attribute = NEU_JSON_ATTRIBUTE_OPTIONAL, + }, + { + .name = "description", + .t = NEU_JSON_STR, + .attribute = NEU_JSON_ATTRIBUTE_OPTIONAL, + }, + }; + if (req_elems[3].v.val_object) { + ret = neu_json_decode_by_json(req_elems[3].v.val_object, + NEU_JSON_ELEM_SIZE(query_elems), + query_elems); + if (ret != 0) { + goto error; + } + req->name = query_elems[0].v.val_str; + req->desc = query_elems[1].v.val_str; + } + *result = req; neu_json_decode_free(json_obj); return ret; error: + free(query_elems[0].v.val_str); + free(query_elems[1].v.val_str); free(req_elems[0].v.val_str); free(req_elems[1].v.val_str); free(req);