add JSON spec'er for booleans
authorChristian Grothoff <christian@grothoff.org>
Tue, 21 Apr 2020 10:15:16 +0000 (12:15 +0200)
committerChristian Grothoff <christian@grothoff.org>
Tue, 21 Apr 2020 10:15:16 +0000 (12:15 +0200)
src/include/gnunet_json_lib.h
src/json/json_helper.c

index f6cabd5893dcebc610bd60cd02328c7087481890..27996f18d24e68d14c431cfac2515b1be9312268 100644 (file)
@@ -218,6 +218,17 @@ struct GNUNET_JSON_Specification
 GNUNET_JSON_spec_json (const char *name, json_t **jsonp);
 
 
+/**
+ * boolean.
+ *
+ * @param name name of the JSON field
+ * @param[out] b where to store the boolean found under @a name
+ */
+struct GNUNET_JSON_Specification
+GNUNET_JSON_spec_bool (const char *name,
+                       bool *b);
+
+
 /**
  * 8-bit integer.
  *
index 74a92ce9f2fccc40fa6dc3d0177c05dfa7f22067..02bd6bfab50ac0b6d35f795c4765b513dec46fcd 100644 (file)
@@ -326,6 +326,60 @@ GNUNET_JSON_spec_json (const char *name,
 }
 
 
+/**
+ * Parse given JSON object to a bool.
+ *
+ * @param cls closure, NULL
+ * @param root the json object representing data
+ * @param[out] spec where to write the data
+ * @return #GNUNET_OK upon successful parsing; #GNUNET_SYSERR upon error
+ */
+static int
+parse_bool (void *cls,
+            json_t *root,
+            struct GNUNET_JSON_Specification *spec)
+{
+  bool *b = spec->ptr;
+
+  if (json_true () == root)
+  {
+    *b = true;
+    return GNUNET_OK;
+  }
+  if (json_false () == root)
+  {
+    *b = false;
+    return GNUNET_OK;
+  }
+  GNUNET_break_op (0);
+  return GNUNET_SYSERR;
+}
+
+
+/**
+ * boolean.
+ *
+ * @param name name of the JSON field
+ * @param[out] b where to store the boolean found under @a name
+ */
+struct GNUNET_JSON_Specification
+GNUNET_JSON_spec_bool (const char *name,
+                       bool *b)
+{
+  struct GNUNET_JSON_Specification ret = {
+    .parser = &parse_bool,
+    .cleaner = NULL,
+    .cls = NULL,
+    .field = name,
+    .ptr = b,
+    .ptr_size = sizeof(bool),
+    .size_ptr = NULL
+  };
+
+  return ret;
+}
+
+
 /**
  * Parse given JSON object to a uint8_t.
  *