10#ifndef __UTILS_YAML_H__
11#define __UTILS_YAML_H__
13#include "zrythm-config.h"
15#include "utils/string.h"
20# include <cyaml/cyaml.h>
31# define YAML_FIELD_IGNORE_OPT(key) \
32 CYAML_FIELD_IGNORE (key, CYAML_FLAG_OPTIONAL)
37# define YAML_FIELD_MAPPING_EMBEDDED(owner, member, schema) \
38 CYAML_FIELD_MAPPING (#member, CYAML_FLAG_DEFAULT, owner, member, schema)
43# define YAML_FIELD_MAPPING_PTR(owner, member, schema) \
44 CYAML_FIELD_MAPPING_PTR (#member, CYAML_FLAG_POINTER, owner, member, schema)
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)
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, \
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)
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, \
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)
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)
134# define YAML_FIELD_DYN_PTR_ARRAY_VAR_COUNT_OPT(owner, member, schema) \
135 YAML_FIELD_DYN_ARRAY_VAR_COUNT (owner, member, schema)
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, \
165# define YAML_FIELD_DYN_ARRAY_VAR_COUNT_PRIMITIVES(owner, member, schema) \
166 YAML_FIELD_DYN_ARRAY_VAR_COUNT (owner, member, schema)
171# define YAML_FIELD_SEQUENCE_FIXED(owner, member, schema, size) \
172 CYAML_FIELD_SEQUENCE_FIXED ( \
173 #member, CYAML_FLAG_DEFAULT, owner, member, &schema, size)
175# define YAML_FIELD_INT(owner, member) \
176 CYAML_FIELD_INT (#member, CYAML_FLAG_DEFAULT, owner, member)
178# define YAML_FIELD_INT_OPT(owner, member) \
179 CYAML_FIELD_INT (#member, CYAML_FLAG_OPTIONAL, owner, member)
181# define YAML_FIELD_UINT(owner, member) \
182 CYAML_FIELD_UINT (#member, CYAML_FLAG_DEFAULT, owner, member)
184# define YAML_FIELD_FLOAT(owner, member) \
185 CYAML_FIELD_FLOAT (#member, CYAML_FLAG_DEFAULT, owner, member)
187# define YAML_FIELD_STRING_PTR(owner, member) \
188 CYAML_FIELD_STRING_PTR ( \
189 #member, CYAML_FLAG_POINTER, owner, member, 0, CYAML_UNLIMITED)
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, \
196# define YAML_FIELD_ENUM(owner, member, strings) \
198 #member, CYAML_FLAG_DEFAULT, owner, member, strings, \
199 CYAML_ARRAY_LEN (strings))
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))
209# define YAML_VALUE_PTR(cc, fields_schema) \
210 CYAML_VALUE_MAPPING (CYAML_FLAG_POINTER, cc, fields_schema)
216# define YAML_VALUE_PTR_NULLABLE(cc, fields_schema) \
217 CYAML_VALUE_MAPPING (CYAML_FLAG_POINTER_NULL_STR, cc, fields_schema)
225# define YAML_VALUE_DEFAULT(cc, fields_schema) \
226 CYAML_VALUE_MAPPING (CYAML_FLAG_DEFAULT, cc, fields_schema)
228# define YAML_BITVAL(_name, _offset) \
229 { .name = _name, .offset = _offset, .bits = 1 }
238zrythm::utils::string::CStringRAII
239yaml_serialize (
void * data,
const cyaml_schema_value_t * schema);
250yaml_deserialize (
const char * yaml,
const cyaml_schema_value_t * schema);
253yaml_print (
void * data,
const cyaml_schema_value_t * schema);
266yaml_set_log_level (cyaml_log_t level);
269yaml_get_cyaml_config (cyaml_config_t * cyaml_config);
271static const cyaml_schema_value_t int_schema = {
272 CYAML_VALUE_INT (CYAML_FLAG_DEFAULT,
int),
275static const cyaml_schema_value_t unsigned_int_schema = {
276 CYAML_VALUE_UINT (CYAML_FLAG_DEFAULT,
unsigned int),
279static const cyaml_schema_value_t uint8_t_schema = {
280 CYAML_VALUE_UINT (CYAML_FLAG_DEFAULT, uint8_t),
283static const cyaml_schema_value_t float_schema = {
284 CYAML_VALUE_FLOAT (CYAML_FLAG_DEFAULT,
float),
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),
296static const cyaml_schema_value_t gdk_rgba_schema_default = {
297 YAML_VALUE_DEFAULT (GdkRGBA, gdk_rgba_fields_schema),
300static const cyaml_schema_value_t gdk_rgba_schema = {
301 YAML_VALUE_PTR (GdkRGBA, gdk_rgba_fields_schema),
304typedef enum YamlDummyEnum