fputs(colors[COLOR_RESET], f);
break;
+ case SD_VARLINK_ANY:
+ fputs(colors[COLOR_FIELD_TYPE], f);
+ fputs("any", f);
+ fputs(colors[COLOR_RESET], f);
+ break;
+
case SD_VARLINK_NAMED_TYPE:
fputs(colors[COLOR_IDENTIFIER], f);
fputs(ASSERT_PTR(field->named_type), f);
} else if (startswith(*p, "object")) {
l = 6;
field->field_type = SD_VARLINK_OBJECT;
+ } else if (startswith(*p, "any")) {
+ l = 3;
+ field->field_type = SD_VARLINK_ANY;
} else if (**p == '(') {
_cleanup_(varlink_symbol_freep) sd_varlink_symbol *symbol = NULL;
size_t n_fields = 0;
/* We might want to reference VARLINK_STRUCT_TYPE and VARLINK_ENUM_TYPE symbols where we also
* reference native types, hence make sure the native type names are refused as symbol names. */
- if (STR_IN_SET(name, "bool", "int", "float", "string", "object"))
+ if (STR_IN_SET(name, "bool", "int", "float", "string", "object", "any"))
return false;
/* Symbols must be named with an uppercase letter as first character */
break;
+ case SD_VARLINK_ANY:
+ /* The any type accepts any JSON value, no validation needed */
+ break;
+
case _SD_VARLINK_FIELD_COMMENT:
break;
SD_VARLINK_DEFINE_FIELD(ooom, SD_VARLINK_OBJECT, SD_VARLINK_MAP),
SD_VARLINK_DEFINE_FIELD(ooonm, SD_VARLINK_OBJECT, SD_VARLINK_NULLABLE|SD_VARLINK_MAP),
+ SD_VARLINK_DEFINE_FIELD(aaa, SD_VARLINK_ANY, 0),
+ SD_VARLINK_DEFINE_FIELD(aaan, SD_VARLINK_ANY, SD_VARLINK_NULLABLE),
+ SD_VARLINK_DEFINE_FIELD(aaaa, SD_VARLINK_ANY, SD_VARLINK_ARRAY),
+ SD_VARLINK_DEFINE_FIELD(aaana, SD_VARLINK_ANY, SD_VARLINK_NULLABLE|SD_VARLINK_ARRAY),
+ SD_VARLINK_DEFINE_FIELD(aaam, SD_VARLINK_ANY, SD_VARLINK_MAP),
+ SD_VARLINK_DEFINE_FIELD(aaanm, SD_VARLINK_ANY, SD_VARLINK_NULLABLE|SD_VARLINK_MAP),
+
SD_VARLINK_DEFINE_FIELD_BY_TYPE(eee, EnumTest, 0),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(eeen, EnumTest, SD_VARLINK_NULLABLE),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(eeea, EnumTest, SD_VARLINK_ARRAY),
assert_se(!varlink_idl_symbol_name_is_valid("float"));
assert_se(!varlink_idl_symbol_name_is_valid("string"));
assert_se(!varlink_idl_symbol_name_is_valid("object"));
+ assert_se(!varlink_idl_symbol_name_is_valid("any"));
}
TEST(field_name_is_valid) {