about summary refs log tree commit diff
path: root/src/libnm-glib-aux/nm-json-aux.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libnm-glib-aux/nm-json-aux.h')
-rw-r--r--src/libnm-glib-aux/nm-json-aux.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/libnm-glib-aux/nm-json-aux.h b/src/libnm-glib-aux/nm-json-aux.h
index 936e9146..088d67a9 100644
--- a/src/libnm-glib-aux/nm-json-aux.h
+++ b/src/libnm-glib-aux/nm-json-aux.h
@@ -271,6 +271,49 @@ nm_jansson_json_as_int64(const NMJsonVt *vt, const nm_json_t *elem, gint64 *out_
 }
 
 static inline int
+nm_jansson_json_as_uint32(const NMJsonVt *vt, const nm_json_t *elem, guint32 *out_val)
+{
+    nm_json_int_t v;
+
+    if (!elem)
+        return 0;
+
+    if (!nm_json_is_integer(elem))
+        return -EINVAL;
+
+    v = vt->nm_json_integer_value(elem);
+    if (v < 0)
+        return -ERANGE;
+    if (v > (guint64) G_MAXUINT32)
+        return -ERANGE;
+
+    NM_SET_OUT(out_val, v);
+    return 1;
+}
+
+static inline int
+nm_jansson_json_as_uint(const NMJsonVt *vt, const nm_json_t *elem, guint *out_val)
+{
+    nm_json_int_t v;
+
+    if (!elem)
+        return 0;
+
+    if (!nm_json_is_integer(elem))
+        return -EINVAL;
+
+    v = vt->nm_json_integer_value(elem);
+    if (v < 0)
+        return -ERANGE;
+
+    if (v > (guint64) G_MAXUINT)
+        return -ERANGE;
+
+    NM_SET_OUT(out_val, v);
+    return 1;
+}
+
+static inline int
 nm_jansson_json_as_uint64(const NMJsonVt *vt, const nm_json_t *elem, guint64 *out_val)
 {
     nm_json_int_t v;
@@ -328,17 +371,27 @@ nm_value_type_to_json(NMValueType value_type, GString *gstr, gconstpointer p_fie
         nm_json_gstr_append_int64(gstr, *((const gint32 *) p_field));
         return;
     case NM_VALUE_TYPE_INT:
+    case NM_VALUE_TYPE_ENUM:
         nm_json_gstr_append_int64(gstr, *((const int *) p_field));
         return;
     case NM_VALUE_TYPE_INT64:
         nm_json_gstr_append_int64(gstr, *((const gint64 *) p_field));
         return;
+    case NM_VALUE_TYPE_UINT32:
+        nm_json_gstr_append_uint64(gstr, *((const guint32 *) p_field));
+        return;
+    case NM_VALUE_TYPE_UINT:
+    case NM_VALUE_TYPE_FLAGS:
+        nm_json_gstr_append_uint64(gstr, *((const guint *) p_field));
+        return;
     case NM_VALUE_TYPE_UINT64:
         nm_json_gstr_append_uint64(gstr, *((const guint64 *) p_field));
         return;
     case NM_VALUE_TYPE_STRING:
         nm_json_gstr_append_string(gstr, *((const char *const *) p_field));
         return;
+    case NM_VALUE_TYPE_BYTES:
+    case NM_VALUE_TYPE_NONE:
     case NM_VALUE_TYPE_UNSPEC:
         break;
     }
@@ -357,9 +410,15 @@ nm_value_type_from_json(const NMJsonVt * vt,
     case NM_VALUE_TYPE_INT32:
         return (nm_jansson_json_as_int32(vt, elem, out_val) > 0);
     case NM_VALUE_TYPE_INT:
+    case NM_VALUE_TYPE_ENUM:
         return (nm_jansson_json_as_int(vt, elem, out_val) > 0);
     case NM_VALUE_TYPE_INT64:
         return (nm_jansson_json_as_int64(vt, elem, out_val) > 0);
+    case NM_VALUE_TYPE_UINT32:
+        return (nm_jansson_json_as_uint32(vt, elem, out_val) > 0);
+    case NM_VALUE_TYPE_UINT:
+    case NM_VALUE_TYPE_FLAGS:
+        return (nm_jansson_json_as_uint(vt, elem, out_val) > 0);
     case NM_VALUE_TYPE_UINT64:
         return (nm_jansson_json_as_uint64(vt, elem, out_val) > 0);
 
@@ -368,6 +427,8 @@ nm_value_type_from_json(const NMJsonVt * vt,
     case NM_VALUE_TYPE_STRING:
         return (nm_jansson_json_as_string(vt, elem, out_val) > 0);
 
+    case NM_VALUE_TYPE_BYTES:
+    case NM_VALUE_TYPE_NONE:
     case NM_VALUE_TYPE_UNSPEC:
         break;
     }