+#define side_arg_vla_visitor(_ctx) { .type = SIDE_TYPE_VLA_VISITOR, .u = { .side_vla_app_visitor_ctx = (_ctx) } }
+
+#define side_arg_array_u8(_ptr) { .type = SIDE_TYPE_ARRAY_U8, .u = { .side_array_fixint = (_ptr) } }
+#define side_arg_array_u16(_ptr) { .type = SIDE_TYPE_ARRAY_U16, .u = { .side_array_fixint = (_ptr) } }
+#define side_arg_array_u32(_ptr) { .type = SIDE_TYPE_ARRAY_U32, .u = { .side_array_fixint = (_ptr) } }
+#define side_arg_array_u64(_ptr) { .type = SIDE_TYPE_ARRAY_U64, .u = { .side_array_fixint = (_ptr) } }
+#define side_arg_array_s8(_ptr) { .type = SIDE_TYPE_ARRAY_S8, .u = { .side_array_fixint = (_ptr) } }
+#define side_arg_array_s16(_ptr) { .type = SIDE_TYPE_ARRAY_S16, .u = { .side_array_fixint = (_ptr) } }
+#define side_arg_array_s32(_ptr) { .type = SIDE_TYPE_ARRAY_S32, .u = { .side_array_fixint = (_ptr) } }
+#define side_arg_array_s64(_ptr) { .type = SIDE_TYPE_ARRAY_S64, .u = { .side_array_fixint = (_ptr) } }
+#define side_arg_array_byte(_ptr) { .type = SIDE_TYPE_ARRAY_BYTE, .u = { .side_array_fixint = (_ptr) } }
+
+#define side_arg_vla_u8(_ptr, _length) { .type = SIDE_TYPE_VLA_U8, .u = { .side_vla_fixint = { .p = (_ptr), .length = (_length) } }
+#define side_arg_vla_u16(_ptr, _length) { .type = SIDE_TYPE_VLA_U16, .u = { .side_vla_fixint = { .p = (_ptr), .length = (_length) } } }
+#define side_arg_vla_u32(_ptr, _length) { .type = SIDE_TYPE_VLA_U32, .u = { .side_vla_fixint = { .p = (_ptr), .length = (_length) } } }
+#define side_arg_vla_u64(_ptr, _length) { .type = SIDE_TYPE_VLA_U64, .u = { .side_vla_fixint = { .p = (_ptr), .length = (_length) } } }
+#define side_arg_vla_s8(_ptr, _length) { .type = SIDE_TYPE_VLA_S8, .u = { .side_vla_fixint = { .p = (_ptr), .length = (_length) } } }
+#define side_arg_vla_s16(_ptr, _length) { .type = SIDE_TYPE_VLA_S16, .u = { .side_vla_fixint = { .p = (_ptr), .length = (_length) } } }
+#define side_arg_vla_s32(_ptr, _length) { .type = SIDE_TYPE_VLA_S32, .u = { .side_vla_fixint = { .p = (_ptr), .length = (_length) } } }
+#define side_arg_vla_s64(_ptr, _length) { .type = SIDE_TYPE_VLA_S64, .u = { .side_vla_fixint = { .p = (_ptr), .length = (_length) } } }
+#define side_arg_vla_byte(_ptr, _length) { .type = SIDE_TYPE_VLA_BYTE, .u = { .side_vla_fixint = { .p = (_ptr), .length = (_length) } } }
+
+#define side_arg_dynamic(_dynamic_arg_type) \
+ { \
+ .type = SIDE_TYPE_DYNAMIC, \
+ .u = { \
+ .dynamic = _dynamic_arg_type, \
+ }, \
+ }
+
+/* Dynamic field arguments */
+
+#define side_arg_dynamic_null(_attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_NULL, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ }, \
+ }, \
+ }
+
+#define side_arg_dynamic_bool(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_BOOL, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .u = { \
+ .side_bool = !!(_val), \
+ }, \
+ }, \
+ }, \
+ }
+
+#define side_arg_dynamic_u8(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_U8, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .u = { \
+ .side_u8 = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+#define side_arg_dynamic_u16(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_U16, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .u = { \
+ .side_u16 = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+#define side_arg_dynamic_u32(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_U32, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .u = { \
+ .side_u32 = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+#define side_arg_dynamic_u64(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_U64, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .u = { \
+ .side_u64 = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+
+#define side_arg_dynamic_s8(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_S8, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .u = { \
+ .side_s8 = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+#define side_arg_dynamic_s16(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_S16, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .u = { \
+ .side_s16 = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+#define side_arg_dynamic_s32(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_S32, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .u = { \
+ .side_s32 = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+#define side_arg_dynamic_s64(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_S64, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .u = { \
+ .side_s64 = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+#define side_arg_dynamic_byte(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_BYTE, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .u = { \
+ .side_byte = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+
+#define side_arg_dynamic_float_binary16(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_FLOAT_BINARY16, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .u = { \
+ .side_float_binary16 = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+#define side_arg_dynamic_float_binary32(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_FLOAT_BINARY32, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .u = { \
+ .side_float_binary32 = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+#define side_arg_dynamic_float_binary64(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_FLOAT_BINARY64, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .u = { \
+ .side_float_binary64 = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+#define side_arg_dynamic_float_binary128(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_FLOAT_BINARY128, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .u = { \
+ .side_float_binary128 = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+
+#define side_arg_dynamic_string(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_STRING, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .u = { \
+ .string = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+
+#define side_arg_dynamic_vla(_vla) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_VLA, \
+ .u = { \
+ .side_dynamic_vla = (_vla), \
+ }, \
+ }
+
+#define side_arg_dynamic_vla_visitor(_dynamic_vla_visitor, _ctx, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_VLA_VISITOR, \
+ .u = { \
+ .side_dynamic_vla_visitor = { \
+ .app_ctx = _ctx, \
+ .visitor = _dynamic_vla_visitor, \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ }, \
+ }, \
+ }
+
+#define side_arg_dynamic_struct(_struct) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_STRUCT, \
+ .u = { \
+ .side_dynamic_struct = (_struct), \
+ }, \
+ }
+
+#define side_arg_dynamic_struct_visitor(_dynamic_struct_visitor, _ctx, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_STRUCT_VISITOR, \
+ .u = { \
+ .side_dynamic_struct_visitor = { \
+ .app_ctx = _ctx, \
+ .visitor = _dynamic_struct_visitor, \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ }, \
+ }, \
+ }
+
+#define side_arg_dynamic_define_vec(_identifier, _sav, _attr) \
+ const struct side_arg_dynamic_vec _identifier##_vec[] = { _sav }; \
+ const struct side_arg_dynamic_vec_vla _identifier = { \
+ .sav = _identifier##_vec, \
+ .attr = _attr, \
+ .len = SIDE_ARRAY_SIZE(_identifier##_vec), \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ }
+
+#define side_arg_dynamic_define_struct(_identifier, _struct_fields, _attr) \
+ const struct side_arg_dynamic_event_field _identifier##_fields[] = { _struct_fields }; \
+ const struct side_arg_dynamic_event_struct _identifier = { \
+ .fields = _identifier##_fields, \
+ .attr = _attr, \
+ .len = SIDE_ARRAY_SIZE(_identifier##_fields), \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ }