summaryrefslogtreecommitdiffstats
path: root/src/json.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/json.c')
-rw-r--r--src/json.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/json.c b/src/json.c
index b76a3b7..078dfb7 100644
--- a/src/json.c
+++ b/src/json.c
@@ -39,6 +39,35 @@ int og_json_parse_bool(json_t *element, bool *value)
return 0;
}
+int og_json_parse_scope(json_t *element, struct og_scope *scope,
+ const uint64_t required_flags)
+{
+ uint64_t flags = 0UL;
+ const char *key;
+ json_t *value;
+ int err = 0;
+
+ json_object_foreach(element, key, value) {
+ if (!strcmp(key, "id")) {
+ err = og_json_parse_uint(value, &scope->id);
+ flags |= OG_PARAM_SCOPE_ID;
+ } else if (!strcmp(key, "type")) {
+ err = og_json_parse_string(value, &scope->type);
+ flags |= OG_PARAM_SCOPE_TYPE;
+ } else {
+ err = -1;
+ }
+
+ if (err < 0)
+ return err;
+ }
+
+ if (flags != required_flags)
+ return -1;
+
+ return err;
+}
+
int og_json_parse_partition(json_t *element, struct og_partition *part,
uint64_t required_flags)
{