Libecoli  0.11.3
Extensible COmmand LIne library
config.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright 2018, Olivier MATZ <zer0@droids-corp.org>
3  */
4 
12 #pragma once
13 
14 #include <stdbool.h>
15 #include <stdint.h>
16 #include <stdio.h>
17 #include <sys/queue.h>
18 
19 struct ec_config;
20 struct ec_dict;
21 
26  EC_CONFIG_TYPE_NONE = 0,
27  EC_CONFIG_TYPE_BOOL,
28  EC_CONFIG_TYPE_INT64,
29  EC_CONFIG_TYPE_UINT64,
30  EC_CONFIG_TYPE_STRING,
31  EC_CONFIG_TYPE_NODE,
32  EC_CONFIG_TYPE_LIST,
33  EC_CONFIG_TYPE_DICT,
34 };
35 
40  EC_CONFIG_F_MANDATORY = 1 << 0,
41 };
42 
51  const char *key;
52  const char *desc;
53  enum ec_config_type type;
54  enum ec_config_flags flags;
58  const struct ec_config_schema *subschema;
59 };
60 
61 TAILQ_HEAD(ec_config_list, ec_config);
62 
66 struct ec_config {
68  enum ec_config_type type;
69 
70  union {
71  bool boolean;
72  int64_t i64;
73  uint64_t u64;
74  char *string;
75  struct ec_node *node;
76  struct ec_dict *dict;
77  struct ec_config_list list;
78  };
79 
83  TAILQ_ENTRY(ec_config) next;
84 };
85 
95 int ec_config_schema_validate(const struct ec_config_schema *schema);
96 
108 void ec_config_schema_dump(FILE *out, const struct ec_config_schema *schema, const char *name);
109 
123 const struct ec_config_schema *
124 ec_config_schema_lookup(const struct ec_config_schema *schema, const char *key);
125 
134 enum ec_config_type ec_config_schema_type(const struct ec_config_schema *schema_elt);
135 
144 const struct ec_config_schema *ec_config_schema_sub(const struct ec_config_schema *schema_elt);
145 
156 bool ec_config_key_is_reserved(const char *name);
157 
161 extern const char *ec_config_reserved_keys[];
162 
171 enum ec_config_type ec_config_get_type(const struct ec_config *config);
172 
181 struct ec_config *ec_config_bool(bool boolean);
182 
191 struct ec_config *ec_config_i64(int64_t i64);
192 
201 struct ec_config *ec_config_u64(uint64_t u64);
202 
212 struct ec_config *ec_config_string(const char *string);
213 
225 struct ec_config *ec_config_node(struct ec_node *node);
226 
234 struct ec_config *ec_config_dict(void);
235 
243 struct ec_config *ec_config_list(void);
244 
257 int ec_config_list_add(struct ec_config *list, struct ec_config *value);
258 
271 int ec_config_list_del(struct ec_config *list, struct ec_config *config);
272 
281 ssize_t ec_config_count(const struct ec_config *config);
282 
294 int ec_config_validate(const struct ec_config *dict, const struct ec_config_schema *schema);
295 
309 int ec_config_dict_set(struct ec_config *dict, const char *key, struct ec_config *value);
310 
323 int ec_config_dict_del(struct ec_config *dict, const char *key);
324 
328 int ec_config_cmp(const struct ec_config *config1, const struct ec_config *config2);
329 
333 struct ec_config *ec_config_dict_get(const struct ec_config *config, const char *key);
334 
354 
365 struct ec_config *ec_config_list_next(struct ec_config *list, struct ec_config *config);
366 
373 void ec_config_free(struct ec_config *config);
374 
381 int ec_config_cmp(const struct ec_config *value1, const struct ec_config *value2);
382 
391 struct ec_config *ec_config_dup(const struct ec_config *config);
392 
401 void ec_config_dump(FILE *out, const struct ec_config *config);
402 
int ec_config_list_del(struct ec_config *list, struct ec_config *config)
ec_config_flags
Definition: config.h:39
struct ec_config * ec_config_list(void)
struct ec_config * ec_config_u64(uint64_t u64)
int ec_config_schema_validate(const struct ec_config_schema *schema)
struct ec_config * ec_config_list_next(struct ec_config *list, struct ec_config *config)
enum ec_config_type ec_config_schema_type(const struct ec_config_schema *schema_elt)
int ec_config_cmp(const struct ec_config *config1, const struct ec_config *config2)
int ec_config_dict_del(struct ec_config *dict, const char *key)
void ec_config_schema_dump(FILE *out, const struct ec_config_schema *schema, const char *name)
const struct ec_config_schema * ec_config_schema_sub(const struct ec_config_schema *schema_elt)
struct ec_config * ec_config_dict(void)
void ec_config_free(struct ec_config *config)
ssize_t ec_config_count(const struct ec_config *config)
const char * ec_config_reserved_keys[]
struct ec_config * ec_config_dup(const struct ec_config *config)
struct ec_config * ec_config_node(struct ec_node *node)
struct ec_config * ec_config_list_first(struct ec_config *list)
struct ec_config * ec_config_bool(bool boolean)
ec_config_type
Definition: config.h:25
void ec_config_dump(FILE *out, const struct ec_config *config)
int ec_config_dict_set(struct ec_config *dict, const char *key, struct ec_config *value)
int ec_config_list_add(struct ec_config *list, struct ec_config *value)
struct ec_config * ec_config_dict_get(const struct ec_config *config, const char *key)
int ec_config_validate(const struct ec_config *dict, const struct ec_config_schema *schema)
struct ec_config * ec_config_i64(int64_t i64)
struct ec_config * ec_config_string(const char *string)
const struct ec_config_schema * ec_config_schema_lookup(const struct ec_config_schema *schema, const char *key)
enum ec_config_type ec_config_get_type(const struct ec_config *config)
bool ec_config_key_is_reserved(const char *name)
struct ec_dict * ec_dict(void)
struct ec_node * ec_node(const char *typename, const char *id)
enum ec_config_flags flags
Definition: config.h:54