Zrythm
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
10#ifndef __UTILS_YAML_H__
11#define __UTILS_YAML_H__
12
13#include <gtk/gtk.h>
14
15#include <cyaml/cyaml.h>
16
26#define YAML_FIELD_IGNORE_OPT(key) CYAML_FIELD_IGNORE (key, CYAML_FLAG_OPTIONAL)
27
31#define YAML_FIELD_MAPPING_EMBEDDED(owner, member, schema) \
32 CYAML_FIELD_MAPPING (#member, CYAML_FLAG_DEFAULT, owner, member, schema)
33
37#define YAML_FIELD_MAPPING_PTR(owner, member, schema) \
38 CYAML_FIELD_MAPPING_PTR (#member, CYAML_FLAG_POINTER, owner, member, schema)
39
43#define YAML_FIELD_MAPPING_PTR_OPTIONAL(owner, member, schema) \
44 CYAML_FIELD_MAPPING_PTR ( \
45 #member, CYAML_FLAG_POINTER | CYAML_FLAG_OPTIONAL, owner, member, schema)
46
55#define YAML_FIELD_FIXED_SIZE_PTR_ARRAY_VAR_COUNT(owner, member, schema) \
56 CYAML_FIELD_SEQUENCE_COUNT ( \
57 #member, CYAML_FLAG_DEFAULT, owner, member, num_##member, &schema, 0, \
58 CYAML_UNLIMITED)
59
67#define YAML_FIELD_FIXED_SIZE_PTR_ARRAY(owner, member, schema, size) \
68 CYAML_FIELD_SEQUENCE_FIXED ( \
69 #member, CYAML_FLAG_DEFAULT, owner, member, &schema, size)
70
81#define YAML_FIELD_DYN_PTR_ARRAY_VAR_COUNT(owner, member, schema) \
82 CYAML_FIELD_SEQUENCE_COUNT ( \
83 #member, CYAML_FLAG_POINTER, owner, member, num_##member, &schema, 0, \
84 CYAML_UNLIMITED)
85
94#define YAML_FIELD_DYN_FIXED_SIZE_PTR_ARRAY(owner, member, schema, fixed_size) \
95 CYAML_FIELD_SEQUENCE_FIXED ( \
96 #member, CYAML_FLAG_POINTER, owner, member, &schema, fixed_size)
97
112#define YAML_FIELD_DYN_ARRAY_VAR_COUNT(owner, member, schema) \
113 CYAML_FIELD_SEQUENCE_COUNT ( \
114 #member, CYAML_FLAG_POINTER | CYAML_FLAG_OPTIONAL, owner, member, \
115 num_##member, &schema, 0, CYAML_UNLIMITED)
116
127#define YAML_FIELD_DYN_PTR_ARRAY_VAR_COUNT_OPT(owner, member, schema) \
128 YAML_FIELD_DYN_ARRAY_VAR_COUNT (owner, member, schema)
129
138#define YAML_FIELD_DYN_FIXED_SIZE_PTR_ARRAY_OPT( \
139 owner, member, schema, fixed_size) \
140 CYAML_FIELD_SEQUENCE_FIXED ( \
141 #member, CYAML_FLAG_POINTER | CYAML_FLAG_OPTIONAL, owner, member, &schema, \
142 fixed_size)
143
158#define YAML_FIELD_DYN_ARRAY_VAR_COUNT_PRIMITIVES(owner, member, schema) \
159 YAML_FIELD_DYN_ARRAY_VAR_COUNT (owner, member, schema)
160
164#define YAML_FIELD_SEQUENCE_FIXED(owner, member, schema, size) \
165 CYAML_FIELD_SEQUENCE_FIXED ( \
166 #member, CYAML_FLAG_DEFAULT, owner, member, &schema, size)
167
168#define YAML_FIELD_INT(owner, member) \
169 CYAML_FIELD_INT (#member, CYAML_FLAG_DEFAULT, owner, member)
170
171#define YAML_FIELD_INT_OPT(owner, member) \
172 CYAML_FIELD_INT (#member, CYAML_FLAG_OPTIONAL, owner, member)
173
174#define YAML_FIELD_UINT(owner, member) \
175 CYAML_FIELD_UINT (#member, CYAML_FLAG_DEFAULT, owner, member)
176
177#define YAML_FIELD_FLOAT(owner, member) \
178 CYAML_FIELD_FLOAT (#member, CYAML_FLAG_DEFAULT, owner, member)
179
180#define YAML_FIELD_STRING_PTR(owner, member) \
181 CYAML_FIELD_STRING_PTR ( \
182 #member, CYAML_FLAG_POINTER, owner, member, 0, CYAML_UNLIMITED)
183
184#define YAML_FIELD_STRING_PTR_OPTIONAL(owner, member) \
185 CYAML_FIELD_STRING_PTR ( \
186 #member, CYAML_FLAG_POINTER | CYAML_FLAG_OPTIONAL, owner, member, 0, \
187 CYAML_UNLIMITED)
188
189#define YAML_FIELD_ENUM(owner, member, strings) \
190 CYAML_FIELD_ENUM ( \
191 #member, CYAML_FLAG_DEFAULT, owner, member, strings, \
192 CYAML_ARRAY_LEN (strings))
193
194#define YAML_FIELD_BITFIELD(owner, member, bitvals) \
195 CYAML_FIELD_BITFIELD ( \
196 #member, CYAML_FLAG_DEFAULT, owner, member, bitvals, \
197 CYAML_ARRAY_LEN (bitvals))
198
202#define YAML_VALUE_PTR(cc, fields_schema) \
203 CYAML_VALUE_MAPPING (CYAML_FLAG_POINTER, cc, fields_schema)
204
209#define YAML_VALUE_PTR_NULLABLE(cc, fields_schema) \
210 CYAML_VALUE_MAPPING (CYAML_FLAG_POINTER_NULL_STR, cc, fields_schema)
211
218#define YAML_VALUE_DEFAULT(cc, fields_schema) \
219 CYAML_VALUE_MAPPING (CYAML_FLAG_DEFAULT, cc, fields_schema)
220
221#define YAML_BITVAL(_name, _offset) \
222 { \
223 .name = _name, .offset = _offset, .bits = 1 \
224 }
225
232NONNULL_ARGS (1, 2)
234 void * data,
235 const cyaml_schema_value_t * schema,
236 GError ** error);
237
238NONNULL_ARGS (1, 2)
239void * yaml_deserialize (
240 const char * yaml,
241 const cyaml_schema_value_t * schema,
242 GError ** error);
243
244NONNULL void
245yaml_print (void * data, const cyaml_schema_value_t * schema);
246
250void
252 cyaml_log_t level,
253 void * ctxt,
254 const char * format,
255 va_list args);
256
257void
258yaml_set_log_level (cyaml_log_t level);
259
260void
261yaml_get_cyaml_config (cyaml_config_t * cyaml_config);
262
263static const cyaml_schema_value_t int_schema = {
264 CYAML_VALUE_INT (CYAML_FLAG_DEFAULT, int),
265};
266
267static const cyaml_schema_value_t unsigned_int_schema = {
268 CYAML_VALUE_UINT (CYAML_FLAG_DEFAULT, unsigned int),
269};
270
271static const cyaml_schema_value_t uint8_t_schema = {
272 CYAML_VALUE_UINT (CYAML_FLAG_DEFAULT, typeof (uint8_t)),
273};
274
275static const cyaml_schema_value_t float_schema = {
276 CYAML_VALUE_FLOAT (CYAML_FLAG_DEFAULT, typeof (float)),
277};
278
279static const cyaml_schema_field_t gdk_rgba_fields_schema[] = {
280 CYAML_FIELD_FLOAT ("red", CYAML_FLAG_DEFAULT, GdkRGBA, red),
281 CYAML_FIELD_FLOAT ("green", CYAML_FLAG_DEFAULT, GdkRGBA, green),
282 CYAML_FIELD_FLOAT ("blue", CYAML_FLAG_DEFAULT, GdkRGBA, blue),
283 CYAML_FIELD_FLOAT ("alpha", CYAML_FLAG_DEFAULT, GdkRGBA, alpha),
284
285 CYAML_FIELD_END
286};
287
288static const cyaml_schema_value_t gdk_rgba_schema_default = {
289 YAML_VALUE_DEFAULT (GdkRGBA, gdk_rgba_fields_schema),
290};
291
292static const cyaml_schema_value_t gdk_rgba_schema = {
293 YAML_VALUE_PTR (GdkRGBA, gdk_rgba_fields_schema),
294};
295
296typedef enum YamlDummyEnum
297{
298 YAML_DUMMY_ENUM1,
299} YamlDummyEnum;
300
305#endif
NONNULL_ARGS(1) int undo_manager_undo(UndoManager *self
Undo last action.
#define YAML_VALUE_DEFAULT(cc, fields_schema)
Schema to be used for arrays of structs directly (not as pointers).
Definition yaml.h:218
char * yaml_serialize(void *data, const cyaml_schema_value_t *schema, GError **error)
Serializes to YAML.
#define YAML_VALUE_PTR(cc, fields_schema)
Schema to be used as a pointer.
Definition yaml.h:202
void yaml_cyaml_log_func(cyaml_log_t level, void *ctxt, const char *format, va_list args)
Custom logging function for libcyaml.