source: ogServer-Git/sources/json.c @ c46fa3c

Last change on this file since c46fa3c was 04ca20e, checked in by OpenGnSys Support Team <soporte-og@…>, 4 years ago

#971 split into smaller file

Split ogAdmServer into several files:

  • sources/rest.c that implements the server REST API.
  • sources/client.c that implements the client REST API.
  • sources/json.c that provides a few JSON helpers.
  • Property mode set to 100644
File size: 2.1 KB
Line 
1/*
2 * Copyright (C) 2020 Soleta Networks <info@soleta.eu>
3 *
4 * This program is free software: you can redistribute it and/or modify it under
5 * the terms of the GNU Affero General Public License as published by the
6 * Free Software Foundation, version 3.
7 */
8
9#include "json.h"
10#include <stdint.h>
11
12int og_json_parse_string(json_t *element, const char **str)
13{
14        if (json_typeof(element) != JSON_STRING)
15                return -1;
16
17        *str = json_string_value(element);
18        return 0;
19}
20
21int og_json_parse_uint(json_t *element, uint32_t *integer)
22{
23        if (json_typeof(element) != JSON_INTEGER)
24                return -1;
25
26        *integer = json_integer_value(element);
27        return 0;
28}
29
30int og_json_parse_bool(json_t *element, bool *value)
31{
32        if (json_typeof(element) == JSON_TRUE)
33                *value = true;
34        else if (json_typeof(element) == JSON_FALSE)
35                *value = false;
36        else
37                return -1;
38
39        return 0;
40}
41
42int og_json_parse_partition(json_t *element, struct og_partition *part,
43                            uint64_t required_flags)
44{
45        uint64_t flags = 0UL;
46        const char *key;
47        json_t *value;
48        int err = 0;
49
50        json_object_foreach(element, key, value) {
51                if (!strcmp(key, "partition")) {
52                        err = og_json_parse_string(value, &part->number);
53                        flags |= OG_PARAM_PART_NUMBER;
54                } else if (!strcmp(key, "code")) {
55                        err = og_json_parse_string(value, &part->code);
56                        flags |= OG_PARAM_PART_CODE;
57                } else if (!strcmp(key, "filesystem")) {
58                        err = og_json_parse_string(value, &part->filesystem);
59                        flags |= OG_PARAM_PART_FILESYSTEM;
60                } else if (!strcmp(key, "size")) {
61                        err = og_json_parse_string(value, &part->size);
62                        flags |= OG_PARAM_PART_SIZE;
63                } else if (!strcmp(key, "format")) {
64                        err = og_json_parse_string(value, &part->format);
65                        flags |= OG_PARAM_PART_FORMAT;
66                } else if (!strcmp(key, "disk")) {
67                        err = og_json_parse_string(value, &part->disk);
68                        flags |= OG_PARAM_PART_DISK;
69                } else if (!strcmp(key, "os")) {
70                        err = og_json_parse_string(value, &part->os);
71                        flags |= OG_PARAM_PART_OS;
72                } else if (!strcmp(key, "used_size")) {
73                        err = og_json_parse_string(value, &part->used_size);
74                        flags |= OG_PARAM_PART_USED_SIZE;
75                }
76
77                if (err < 0)
78                        return err;
79        }
80
81        if (flags != required_flags)
82                return -1;
83
84        return err;
85}
Note: See TracBrowser for help on using the repository browser.