SD_VARLINK_DEFINE_FIELD(id, SD_VARLINK_STRING, 0),
SD_VARLINK_FIELD_COMMENT("A short human readable description of the feature."),
SD_VARLINK_DEFINE_FIELD(description, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
- SD_VARLINK_FIELD_COMMENT("A URL to documentation for the feature."),
- SD_VARLINK_DEFINE_FIELD(documentation, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
+ SD_VARLINK_FIELD_COMMENT("URLs to documentation for the feature."),
+ SD_VARLINK_DEFINE_FIELD(documentation, SD_VARLINK_STRING, SD_VARLINK_NULLABLE|SD_VARLINK_ARRAY),
SD_VARLINK_FIELD_COMMENT("A URL to an AppStream catalog XML file describing the feature."),
SD_VARLINK_DEFINE_FIELD(appstream, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("Whether the feature is enabled."),
static int feature_to_json(Context *context, const Feature *f, sd_json_variant **ret) {
_cleanup_(sd_json_variant_unrefp) sd_json_variant *v = NULL;
_cleanup_strv_free_ char **transfers = NULL;
+ const char *documentation_strv[2] = { NULL, };
int r;
assert(context);
if (r < 0)
return r;
+ /* FIXME: Long term we’d like to support an array of documentation, but currently the D-Bus interface
+ * doesn’t support that and neither do the internals of sysupdate. So just expose 0 or 1 URLs for now. */
+ documentation_strv[0] = f->documentation;
+
r = sd_json_variant_merge_objectbo(
&v,
SD_JSON_BUILD_PAIR_STRING("id", f->id),
JSON_BUILD_PAIR_STRING_NON_EMPTY("description", f->description),
- JSON_BUILD_PAIR_STRING_NON_EMPTY("documentation", f->documentation),
+ JSON_BUILD_PAIR_STRV_NON_EMPTY("documentation", (char **) documentation_strv),
JSON_BUILD_PAIR_STRING_NON_EMPTY("appstream", f->appstream),
SD_JSON_BUILD_PAIR_BOOLEAN("isEnabled", f->enabled),
JSON_BUILD_PAIR_STRV_NON_EMPTY("transfers", transfers));