Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
yaml.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: © 2019-2023 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
9
10#ifndef __UTILS_YAML_H__
11#define __UTILS_YAML_H__
12
13#include "zrythm-config.h"
14
15#include "utils/string.h"
16
17#if HAVE_CYAML
18
19# include "types.h"
20# include <cyaml/cyaml.h>
21
27
31# define YAML_FIELD_IGNORE_OPT(key) \
32 CYAML_FIELD_IGNORE (key, CYAML_FLAG_OPTIONAL)
33
37# define YAML_FIELD_MAPPING_EMBEDDED(owner, member, schema) \
38 CYAML_FIELD_MAPPING (#member, CYAML_FLAG_DEFAULT, owner, member, schema)
39
43# define YAML_FIELD_MAPPING_PTR(owner, member, schema) \
44 CYAML_FIELD_MAPPING_PTR (#member, CYAML_FLAG_POINTER, owner, member, schema)
45
49# define YAML_FIELD_MAPPING_PTR_OPTIONAL(owner, member, schema) \
50 CYAML_FIELD_MAPPING_PTR ( \
51 #member, CYAML_FLAG_POINTER | CYAML_FLAG_OPTIONAL, owner, member, schema)
52
61# define YAML_FIELD_FIXED_SIZE_PTR_ARRAY_VAR_COUNT(owner, member, schema) \
62 CYAML_FIELD_SEQUENCE_COUNT ( \
63 #member, CYAML_FLAG_DEFAULT, owner, member, num_##member, &schema, 0, \
64 CYAML_UNLIMITED)
65
73# define YAML_FIELD_FIXED_SIZE_PTR_ARRAY(owner, member, schema, size) \
74 CYAML_FIELD_SEQUENCE_FIXED ( \
75 #member, CYAML_FLAG_DEFAULT, owner, member, &schema, size)
76
87# define YAML_FIELD_DYN_PTR_ARRAY_VAR_COUNT(owner, member, schema) \
88 CYAML_FIELD_SEQUENCE_COUNT ( \
89 #member, CYAML_FLAG_POINTER, owner, member, num_##member, &schema, 0, \
90 CYAML_UNLIMITED)
91
100# define YAML_FIELD_DYN_FIXED_SIZE_PTR_ARRAY( \
101 owner, member, schema, fixed_size) \
102 CYAML_FIELD_SEQUENCE_FIXED ( \
103 #member, CYAML_FLAG_POINTER, owner, member, &schema, fixed_size)
104
119# define YAML_FIELD_DYN_ARRAY_VAR_COUNT(owner, member, schema) \
120 CYAML_FIELD_SEQUENCE_COUNT ( \
121 #member, CYAML_FLAG_POINTER | CYAML_FLAG_OPTIONAL, owner, member, \
122 num_##member, &schema, 0, CYAML_UNLIMITED)
123
134# define YAML_FIELD_DYN_PTR_ARRAY_VAR_COUNT_OPT(owner, member, schema) \
135 YAML_FIELD_DYN_ARRAY_VAR_COUNT (owner, member, schema)
136
145# define YAML_FIELD_DYN_FIXED_SIZE_PTR_ARRAY_OPT( \
146 owner, member, schema, fixed_size) \
147 CYAML_FIELD_SEQUENCE_FIXED ( \
148 #member, CYAML_FLAG_POINTER | CYAML_FLAG_OPTIONAL, owner, member, \
149 &schema, fixed_size)
150
165# define YAML_FIELD_DYN_ARRAY_VAR_COUNT_PRIMITIVES(owner, member, schema) \
166 YAML_FIELD_DYN_ARRAY_VAR_COUNT (owner, member, schema)
167
171# define YAML_FIELD_SEQUENCE_FIXED(owner, member, schema, size) \
172 CYAML_FIELD_SEQUENCE_FIXED ( \
173 #member, CYAML_FLAG_DEFAULT, owner, member, &schema, size)
174
175# define YAML_FIELD_INT(owner, member) \
176 CYAML_FIELD_INT (#member, CYAML_FLAG_DEFAULT, owner, member)
177
178# define YAML_FIELD_INT_OPT(owner, member) \
179 CYAML_FIELD_INT (#member, CYAML_FLAG_OPTIONAL, owner, member)
180
181# define YAML_FIELD_UINT(owner, member) \
182 CYAML_FIELD_UINT (#member, CYAML_FLAG_DEFAULT, owner, member)
183
184# define YAML_FIELD_FLOAT(owner, member) \
185 CYAML_FIELD_FLOAT (#member, CYAML_FLAG_DEFAULT, owner, member)
186
187# define YAML_FIELD_STRING_PTR(owner, member) \
188 CYAML_FIELD_STRING_PTR ( \
189 #member, CYAML_FLAG_POINTER, owner, member, 0, CYAML_UNLIMITED)
190
191# define YAML_FIELD_STRING_PTR_OPTIONAL(owner, member) \
192 CYAML_FIELD_STRING_PTR ( \
193 #member, CYAML_FLAG_POINTER | CYAML_FLAG_OPTIONAL, owner, member, 0, \
194 CYAML_UNLIMITED)
195
196# define YAML_FIELD_ENUM(owner, member, strings) \
197 CYAML_FIELD_ENUM ( \
198 #member, CYAML_FLAG_DEFAULT, owner, member, strings, \
199 CYAML_ARRAY_LEN (strings))
200
201# define YAML_FIELD_BITFIELD(owner, member, bitvals) \
202 CYAML_FIELD_BITFIELD ( \
203 #member, CYAML_FLAG_DEFAULT, owner, member, bitvals, \
204 CYAML_ARRAY_LEN (bitvals))
205
209# define YAML_VALUE_PTR(cc, fields_schema) \
210 CYAML_VALUE_MAPPING (CYAML_FLAG_POINTER, cc, fields_schema)
211
216# define YAML_VALUE_PTR_NULLABLE(cc, fields_schema) \
217 CYAML_VALUE_MAPPING (CYAML_FLAG_POINTER_NULL_STR, cc, fields_schema)
218
225# define YAML_VALUE_DEFAULT(cc, fields_schema) \
226 CYAML_VALUE_MAPPING (CYAML_FLAG_DEFAULT, cc, fields_schema)
227
228# define YAML_BITVAL(_name, _offset) \
229 { .name = _name, .offset = _offset, .bits = 1 }
230
238zrythm::utils::string::CStringRAII
239yaml_serialize (void * data, const cyaml_schema_value_t * schema);
240
249void *
250yaml_deserialize (const char * yaml, const cyaml_schema_value_t * schema);
251
252[[gnu::nonnull]] void
253yaml_print (void * data, const cyaml_schema_value_t * schema);
254
258void
259yaml_cyaml_log_func (
260 cyaml_log_t level,
261 void * ctxt,
262 const char * format,
263 va_list args);
264
265void
266yaml_set_log_level (cyaml_log_t level);
267
268void
269yaml_get_cyaml_config (cyaml_config_t * cyaml_config);
270
271static const cyaml_schema_value_t int_schema = {
272 CYAML_VALUE_INT (CYAML_FLAG_DEFAULT, int),
273};
274
275static const cyaml_schema_value_t unsigned_int_schema = {
276 CYAML_VALUE_UINT (CYAML_FLAG_DEFAULT, unsigned int),
277};
278
279static const cyaml_schema_value_t uint8_t_schema = {
280 CYAML_VALUE_UINT (CYAML_FLAG_DEFAULT, uint8_t),
281};
282
283static const cyaml_schema_value_t float_schema = {
284 CYAML_VALUE_FLOAT (CYAML_FLAG_DEFAULT, float),
285};
286
287static const cyaml_schema_field_t gdk_rgba_fields_schema[] = {
288 CYAML_FIELD_FLOAT ("red", CYAML_FLAG_DEFAULT, GdkRGBA, red),
289 CYAML_FIELD_FLOAT ("green", CYAML_FLAG_DEFAULT, GdkRGBA, green),
290 CYAML_FIELD_FLOAT ("blue", CYAML_FLAG_DEFAULT, GdkRGBA, blue),
291 CYAML_FIELD_FLOAT ("alpha", CYAML_FLAG_DEFAULT, GdkRGBA, alpha),
292
293 CYAML_FIELD_END
294};
295
296static const cyaml_schema_value_t gdk_rgba_schema_default = {
297 YAML_VALUE_DEFAULT (GdkRGBA, gdk_rgba_fields_schema),
298};
299
300static const cyaml_schema_value_t gdk_rgba_schema = {
301 YAML_VALUE_PTR (GdkRGBA, gdk_rgba_fields_schema),
302};
303
304typedef enum YamlDummyEnum
305{
306 YAML_DUMMY_ENUM1,
307} YamlDummyEnum;
308
312
313#endif /* HAVE_CYAML */
314
315#endif
Custom types.