Libecoli  0.10.1
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 
86 /* schema */
87 
97 int ec_config_schema_validate(const struct ec_config_schema *schema);
98 
110 void ec_config_schema_dump(FILE *out, const struct ec_config_schema *schema, const char *name);
111 
125 const struct ec_config_schema *
126 ec_config_schema_lookup(const struct ec_config_schema *schema, const char *key);
127 
136 enum ec_config_type ec_config_schema_type(const struct ec_config_schema *schema_elt);
137 
146 const struct ec_config_schema *ec_config_schema_sub(const struct ec_config_schema *schema_elt);
147 
158 bool ec_config_key_is_reserved(const char *name);
159 
163 extern const char *ec_config_reserved_keys[];
164 
165 /* config */
166 
175 enum ec_config_type ec_config_get_type(const struct ec_config *config);
176 
185 struct ec_config *ec_config_bool(bool boolean);
186 
195 struct ec_config *ec_config_i64(int64_t i64);
196 
205 struct ec_config *ec_config_u64(uint64_t u64);
206 
216 struct ec_config *ec_config_string(const char *string);
217 
229 struct ec_config *ec_config_node(struct ec_node *node);
230 
238 struct ec_config *ec_config_dict(void);
239 
247 struct ec_config *ec_config_list(void);
248 
261 int ec_config_list_add(struct ec_config *list, struct ec_config *value);
262 
275 int ec_config_list_del(struct ec_config *list, struct ec_config *config);
276 
285 ssize_t ec_config_count(const struct ec_config *config);
286 
298 int ec_config_validate(const struct ec_config *dict, const struct ec_config_schema *schema);
299 
313 int ec_config_dict_set(struct ec_config *dict, const char *key, struct ec_config *value);
314 
327 int ec_config_dict_del(struct ec_config *dict, const char *key);
328 
332 int ec_config_cmp(const struct ec_config *config1, const struct ec_config *config2);
333 
337 struct ec_config *ec_config_dict_get(const struct ec_config *config, const char *key);
338 
356 
367 struct ec_config *ec_config_list_next(struct ec_config *list, struct ec_config *config);
368 
375 void ec_config_free(struct ec_config *config);
376 
383 int ec_config_cmp(const struct ec_config *value1, const struct ec_config *value2);
384 
393 struct ec_config *ec_config_dup(const struct ec_config *config);
394 
403 void ec_config_dump(FILE *out, const struct ec_config *config);
404 
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