feat: add driver json enconder

This commit is contained in:
eeff
2024-01-17 16:17:10 +08:00
parent e9a3778ca1
commit 5baf46bb18
5 changed files with 144 additions and 7 deletions
+69 -7
View File
@@ -405,6 +405,27 @@ void neu_json_decode_global_config_req_free(neu_json_global_config_req_t *req)
}
}
int neu_json_encode_driver(void *node_json, void *param)
{
neu_json_driver_t *driver = param;
if (!json_is_object((json_t *) node_json)) {
return -1;
}
if (0 != neu_json_encode_add_node_req(node_json, &driver->node)) {
return -1;
}
json_t *groups_json = json_array();
if (NULL == groups_json ||
0 != json_object_set_new(node_json, "groups", groups_json)) {
return -1;
}
return neu_json_encode_gtag_array(groups_json, &driver->gtags);
}
int neu_json_decode_driver_json(void *node_json, neu_json_driver_t *driver_p)
{
if (!json_is_object((json_t *) node_json)) {
@@ -423,7 +444,7 @@ int neu_json_decode_driver_json(void *node_json, neu_json_driver_t *driver_p)
json_t *groups_json = json_object_get(node_json, "groups");
if (NULL == groups_json) {
return 0;
return -1;
}
if (!json_is_array(groups_json)) {
@@ -445,15 +466,33 @@ void neu_json_driver_fini(neu_json_driver_t *req)
neu_json_decode_gtag_array_fini(&req->gtags);
}
int neu_json_decode_driver_array_json(void * obj_json,
neu_json_driver_array_t *arr)
int neu_json_encode_driver_array(void *obj_json, void *param)
{
json_t *root = obj_json;
if (!json_is_object(root)) {
neu_json_driver_array_t *arr = param;
json_t *nodes_json = obj_json;
if (!json_is_array(nodes_json)) {
return -1;
}
json_t *nodes_json = json_object_get(root, "nodes");
for (int i = 0; i < arr->n_driver; ++i) {
json_t *node_json = json_object();
if (NULL == node_json ||
0 != json_array_append_new(nodes_json, node_json)) {
return -1;
}
if (0 != neu_json_encode_driver(node_json, &arr->drivers[i])) {
return -1;
}
}
return 0;
}
int neu_json_decode_driver_array_json(void * obj_json,
neu_json_driver_array_t *arr)
{
json_t *nodes_json = obj_json;
if (!json_is_array(nodes_json)) {
return -1;
}
@@ -489,6 +528,22 @@ void neu_json_driver_array_fini(neu_json_driver_array_t *arr)
free(arr->drivers);
}
int neu_json_encode_drivers_req(void *obj_json, void *param)
{
json_t *root = obj_json;
if (!json_is_object(root)) {
return -1;
}
json_t *nodes_json = json_array();
if (NULL == nodes_json ||
0 != json_object_set_new(root, "nodes", nodes_json)) {
return -1;
}
return neu_json_encode_driver_array(nodes_json, param);
}
int neu_json_decode_drivers_req(char *buf, neu_json_drivers_req_t **result)
{
int ret = 0;
@@ -503,7 +558,14 @@ int neu_json_decode_drivers_req(char *buf, neu_json_drivers_req_t **result)
return -1;
}
ret = neu_json_decode_driver_array_json(json_obj, req);
json_t *nodes_json = json_object_get(json_obj, "nodes");
if (!json_is_array(nodes_json)) {
neu_json_decode_free(json_obj);
free(req);
return -1;
}
ret = neu_json_decode_driver_array_json(nodes_json, req);
if (0 == ret) {
*result = req;
} else {
+3
View File
@@ -77,6 +77,7 @@ typedef struct {
neu_json_gtag_array_t gtags;
} neu_json_driver_t;
int neu_json_encode_driver(void *node_json, void *param);
int neu_json_decode_driver_json(void *node_json, neu_json_driver_t *driver_p);
void neu_json_driver_fini(neu_json_driver_t *req);
@@ -85,12 +86,14 @@ typedef struct {
neu_json_driver_t *drivers;
} neu_json_driver_array_t;
int neu_json_encode_driver_array(void *obj_json, void *param);
int neu_json_decode_driver_array_json(void * obj_json,
neu_json_driver_array_t *arr);
void neu_json_driver_array_fini(neu_json_driver_array_t *arr);
typedef neu_json_driver_array_t neu_json_drivers_req_t;
int neu_json_encode_drivers_req(void *obj_json, void *param);
int neu_json_decode_drivers_req(char *buf, neu_json_drivers_req_t **result);
void neu_json_decode_drivers_req_free(neu_json_drivers_req_t *req);
+8
View File
@@ -50,6 +50,14 @@ int neu_json_encode_add_node_req(void *json_object, void *param)
ret = neu_json_encode_field(json_object, req_elems,
NEU_JSON_ELEM_SIZE(req_elems));
if (0 != ret) {
return -1;
}
if (req->setting) {
ret = neu_json_load_key(json_object, "params", req->setting, false);
}
return ret;
}
+62
View File
@@ -427,6 +427,46 @@ int neu_json_encode_au_tags_resp(void *json_object, void *param)
return ret;
}
int neu_json_encode_gtag(void *json_obj, void *param)
{
neu_json_gtag_t *gtag = param;
json_t * gtag_json = json_obj;
if (!json_is_object(gtag_json)) {
return -1;
}
json_t *tags_json = json_array();
if (NULL == tags_json ||
0 != json_object_set_new(gtag_json, "tags", tags_json)) {
return -1;
}
neu_json_tag_array_t arr = {
.len = gtag->n_tag,
.tags = gtag->tags,
};
if (0 != neu_json_encode_tag_array(tags_json, &arr)) {
return -1;
}
neu_json_elem_t gtag_elems[] = {
{
.name = "group",
.t = NEU_JSON_STR,
.v.val_str = gtag->group,
},
{
.name = "interval",
.t = NEU_JSON_INT,
.v.val_int = gtag->interval,
},
};
return neu_json_encode_field(gtag_json, gtag_elems,
NEU_JSON_ELEM_SIZE(gtag_elems));
}
int neu_json_decode_gtag_json(void *json_obj, neu_json_gtag_t *gtag_p)
{
if (NULL == gtag_p) {
@@ -483,6 +523,28 @@ void neu_json_decode_gtag_fini(neu_json_gtag_t *gtag)
free(gtag->tags);
}
int neu_json_encode_gtag_array(void *json_obj, void *param)
{
neu_json_gtag_array_t *arr = param;
if (!json_is_array((json_t *) json_obj)) {
return -1;
}
for (int i = 0; i < arr->len; i++) {
json_t *gtag_json = json_object();
if (NULL == gtag_json ||
0 != json_array_append_new(json_obj, gtag_json)) {
return -1;
}
if (0 != neu_json_encode_gtag(gtag_json, &arr->gtags[i])) {
return -1;
}
}
return 0;
}
int neu_json_decode_gtag_array_json(void *json_obj, neu_json_gtag_array_t *arr)
{
int len = 0;
+2
View File
@@ -82,6 +82,7 @@ typedef struct {
neu_json_tag_t *tags;
} neu_json_gtag_t;
int neu_json_encode_gtag(void *json_obj, void *param);
int neu_json_decode_gtag_json(void *json_obj, neu_json_gtag_t *gtag_p);
void neu_json_decode_gtag_fini(neu_json_gtag_t *gtag);
@@ -90,6 +91,7 @@ typedef struct {
neu_json_gtag_t *gtags;
} neu_json_gtag_array_t;
int neu_json_encode_gtag_array(void *json_obj, void *param);
int neu_json_decode_gtag_array_json(void *json_obj, neu_json_gtag_array_t *arr);
void neu_json_decode_gtag_array_fini(neu_json_gtag_array_t *arr);