From 793be46324453e5326eb37a13ffb82f92b1f55b1 Mon Sep 17 00:00:00 2001 From: Ole Troan Date: Fri, 4 Dec 2020 13:15:30 +0100 Subject: api: fromjson/tojson enum flag support Represent enum flags as JSON arrays (as these can have multiple values). Add unit tests. Type: improvement Change-Id: I680c5b6f76ef6f05f360e2f3b9c4cbb927e15d7d Signed-off-by: Ole Troan --- src/vat2/jsonconvert.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) (limited to 'src/vat2/jsonconvert.c') diff --git a/src/vat2/jsonconvert.c b/src/vat2/jsonconvert.c index 3aeaeedb2f7..ec066287035 100644 --- a/src/vat2/jsonconvert.c +++ b/src/vat2/jsonconvert.c @@ -314,12 +314,12 @@ void *vl_api_address_t_fromjson(void *mp, int *len, cJSON *o, vl_api_address_t * char *p = cJSON_GetStringValue(o); if (!p) return 0; unformat_init_string (&input, p, strlen(p)); - if (a->af == ADDRESS_IP4) - unformat(&input, "%U", unformat_ip4_address, &a->un.ip4); - else if (a->af == ADDRESS_IP6) - unformat(&input, "%U", unformat_ip6_address, &a->un.ip6); + if (unformat (&input, "%U", unformat_ip4_address, &a->un.ip4)) + a->af = ADDRESS_IP4; + else if (unformat (&input, "%U", unformat_ip6_address, &a->un.ip6)) + a->af = ADDRESS_IP6; else - return 0; + return (0); return mp; } @@ -328,14 +328,17 @@ void *vl_api_prefix_t_fromjson(void *mp, int *len, cJSON *o, vl_api_prefix_t *a) unformat_input_t input; char *p = cJSON_GetStringValue(o); + if (!p) return 0; unformat_init_string (&input, p, strlen(p)); - if (a->address.af == ADDRESS_IP4) - unformat(&input, "%U/%d", unformat_ip4_address, &a->address.un.ip4, &a->len); - else if (a->address.af == ADDRESS_IP6) - unformat(&input, "%U/%d", unformat_ip6_address, &a->address.un.ip6, &a->len); + int plen; + if (unformat (&input, "%U/%d", unformat_ip4_address, &a->address.un.ip4, &plen)) + a->address.af = ADDRESS_IP4; + else if (unformat (&input, "%U/%d", unformat_ip6_address, &a->address.un.ip6, &plen)) + a->address.af = ADDRESS_IP6; else - return 0; + return (0); + a->len = plen; return mp; } -- cgit 1.2.3-korg