sd-json: add sd_json_build() wrapper macro that implies SD_JSON_BUILD_OBJECT()

In 99% of uses of sd_json_build() we want to build an object as
outermost construct. Let's shorten this most common case a bit, by
adding sd_json_buildo() that implies this. This allows us to shorten
much of our code, all across the tree.
This commit is contained in:
Lennart Poettering
2024-06-19 22:50:02 +02:00
parent de732ade09
commit 004c69a27f
3 changed files with 43 additions and 0 deletions
+20
View File
@@ -86,6 +86,8 @@ Varlink* varlink_close_unref(Varlink *v);
/* Enqueue method call, not expecting a reply */
int varlink_send(Varlink *v, const char *method, sd_json_variant *parameters);
int varlink_sendb(Varlink *v, const char *method, ...);
#define varlink_sendbo(v, method, ...) \
varlink_sendb((v), (method), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
/* Send method call and wait for reply */
int varlink_call_full(Varlink *v, const char *method, sd_json_variant *parameters, sd_json_variant **ret_parameters, const char **ret_error_id, VarlinkReplyFlags *ret_flags);
@@ -104,6 +106,8 @@ static inline int varlink_callb_full(Varlink *v, const char *method, sd_json_var
va_end(ap);
return r;
}
#define varlink_callbo_full(v, method, ret_parameters, ret_error_id, ret_flags, ...) \
varlink_callb_full((v), (method), (ret_parameters), (ret_error_id), (ret_flags), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
static inline int varlink_callb(Varlink *v, const char *method, sd_json_variant **ret_parameters, const char **ret_error_id, ...) {
va_list ap;
int r;
@@ -113,7 +117,11 @@ static inline int varlink_callb(Varlink *v, const char *method, sd_json_variant
va_end(ap);
return r;
}
#define varlink_callbo(v, method, ret_parameters, ret_error_id, ...) \
varlink_callb((v), (method), (ret_parameters), (ret_error_id), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
int varlink_callb_and_log(Varlink *v, const char *method, sd_json_variant **ret_parameters, ...);
#define varlink_callbo_and_log(v, method, ret_parameters, ...) \
varlink_callb_and_log((v), (method), (ret_parameters), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
/* Send method call and begin collecting all 'more' replies into an array, finishing when a final reply is sent */
int varlink_collect_full(Varlink *v, const char *method, sd_json_variant *parameters, sd_json_variant **ret_parameters, const char **ret_error_id, VarlinkReplyFlags *ret_flags);
@@ -121,22 +129,32 @@ static inline int varlink_collect(Varlink *v, const char *method, sd_json_varian
return varlink_collect_full(v, method, parameters, ret_parameters, ret_error_id, NULL);
}
int varlink_collectb(Varlink *v, const char *method, sd_json_variant **ret_parameters, const char **ret_error_id, ...);
#define varlink_collectbo(v, method, ret_parameters, ret_error_id, ...) \
varlink_collectb((v), (method), (ret_parameters), (ret_error_id), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
/* Enqueue method call, expect a reply, which is eventually delivered to the reply callback */
int varlink_invoke(Varlink *v, const char *method, sd_json_variant *parameters);
int varlink_invokeb(Varlink *v, const char *method, ...);
#define varlink_invokebo(v, method, ...) \
varlink_invokeb((v), (method), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
/* Enqueue method call, expect a reply now, and possibly more later, which are all delivered to the reply callback */
int varlink_observe(Varlink *v, const char *method, sd_json_variant *parameters);
int varlink_observeb(Varlink *v, const char *method, ...);
#define varlink_observebo(v, method, ...) \
varlink_observeb((v), (method), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
/* Enqueue a final reply */
int varlink_reply(Varlink *v, sd_json_variant *parameters);
int varlink_replyb(Varlink *v, ...);
#define varlink_replybo(v, ...) \
varlink_replyb((v), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
/* Enqueue a (final) error */
int varlink_error(Varlink *v, const char *error_id, sd_json_variant *parameters);
int varlink_errorb(Varlink *v, const char *error_id, ...);
#define varlink_errorbo(v, error_id, ...) \
varlink_errorb((v), (error_id), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
int varlink_error_invalid_parameter(Varlink *v, sd_json_variant *parameters);
int varlink_error_invalid_parameter_name(Varlink *v, const char *name);
int varlink_error_errno(Varlink *v, int error);
@@ -144,6 +162,8 @@ int varlink_error_errno(Varlink *v, int error);
/* Enqueue a "more" reply */
int varlink_notify(Varlink *v, sd_json_variant *parameters);
int varlink_notifyb(Varlink *v, ...);
#define varlink_notifybo(v, ...) \
varlink_notifyb((v), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
/* Ask for the current message to be dispatched again */
int varlink_dispatch_again(Varlink *v);