sd-varlink-idl: add some room for flags everywhere

Given this is supposed to be a public API now, let's add some concept
for extensions of these open-coded structures: let's make sure we have
flags fields on all structures (which we can use for extensions later).
Right now we only have this for varlink "fields" structures, this adds
the same for "symbols" and the "interface" as a whole.

There are no actual flags defined in either for now, this is just
future-safety preparation.

(But a later commit will add two flags to symbols)
This commit is contained in:
Lennart Poettering
2024-10-02 09:22:52 +02:00
parent 96c9e4a2de
commit 1989737276
+14
View File
@@ -34,6 +34,12 @@ _SD_BEGIN_DECLARATIONS;
* format on-the-fly. Can also parse the textual format back to C structures. Validates the interface
* definitions for internal consistency and validates JSON objects against the interface definitions. */
__extension__ typedef enum _SD_ENUM_TYPE_S64(sd_varlink_interface_flags_t) {
_SD_VARLINK_INTERFACE_FLAGS_MAX = (1 << 0) - 1,
_SD_VARLINK_INTERFACE_FLAGS_INVALID = -EINVAL,
_SD_ENUM_FORCE_S64(SD_VARLINK_INTERFACE_FLAGS)
} sd_varlink_interface_flags_t;
__extension__ typedef enum _SD_ENUM_TYPE_S64(sd_varlink_symbol_type_t) {
SD_VARLINK_ENUM_TYPE,
SD_VARLINK_STRUCT_TYPE,
@@ -46,6 +52,12 @@ __extension__ typedef enum _SD_ENUM_TYPE_S64(sd_varlink_symbol_type_t) {
_SD_ENUM_FORCE_S64(SD_VARLINK_SYMBOL)
} sd_varlink_symbol_type_t;
__extension__ typedef enum _SD_ENUM_TYPE_S64(sd_varlink_symbol_flags_t) {
_SD_VARLINK_SYMBOL_FLAGS_MAX = (1 << 0) - 1,
_SD_VARLINK_SYMBOL_FLAGS_INVALID = -EINVAL,
_SD_ENUM_FORCE_S64(SD_VARLINK_SYMBOL_FLAGS)
} sd_varlink_symbol_flags_t;
__extension__ typedef enum _SD_ENUM_TYPE_S64(sd_varlink_field_type_t) {
_SD_VARLINK_FIELD_TYPE_END_MARKER = 0, /* zero type means: this is the last entry in the fields[] array of VarlinkSymbol */
SD_VARLINK_STRUCT,
@@ -99,6 +111,7 @@ struct sd_varlink_field {
struct sd_varlink_symbol {
const char *name; /* most symbols have a name, but sometimes they are created on-the-fly for fields, in which case they are anonymous */
sd_varlink_symbol_type_t symbol_type;
sd_varlink_symbol_flags_t symbol_flags;
#if __STDC_VERSION__ >= 199901L
sd_varlink_field fields[];
#else
@@ -109,6 +122,7 @@ struct sd_varlink_symbol {
/* An interface definition has a name and consist of symbols */
struct sd_varlink_interface {
const char *name;
sd_varlink_interface_flags_t interface_flags;
#if __STDC_VERSION__ >= 199901L
const sd_varlink_symbol *symbols[];
#else