action: support arguments of int type

This commit is contained in:
Johan Malm 2023-06-25 20:20:52 +01:00 committed by Johan Malm
parent 4a531daef8
commit 3a6a04215c

View file

@ -23,6 +23,7 @@
enum action_arg_type { enum action_arg_type {
LAB_ACTION_ARG_STR = 0, LAB_ACTION_ARG_STR = 0,
LAB_ACTION_ARG_BOOL, LAB_ACTION_ARG_BOOL,
LAB_ACTION_ARG_INT,
}; };
struct action_arg { struct action_arg {
@ -42,6 +43,11 @@ struct action_arg_bool {
bool value; bool value;
}; };
struct action_arg_int {
struct action_arg base;
int value;
};
enum action_type { enum action_type {
ACTION_TYPE_INVALID = 0, ACTION_TYPE_INVALID = 0,
ACTION_TYPE_NONE, ACTION_TYPE_NONE,
@ -134,6 +140,18 @@ action_arg_add_bool(struct action *action, char *key, bool value)
wl_list_append(&action->args, &arg->base.link); wl_list_append(&action->args, &arg->base.link);
} }
static void
action_arg_add_int(struct action *action, char *key, int value)
{
struct action_arg_int *arg = znew(*arg);
arg->base.type = LAB_ACTION_ARG_INT;
if (key) {
arg->base.key = xstrdup(key);
}
arg->value = value;
wl_list_append(&action->args, &arg->base.link);
}
void void
action_arg_from_xml_node(struct action *action, char *nodename, char *content) action_arg_from_xml_node(struct action *action, char *nodename, char *content)
{ {
@ -247,6 +265,23 @@ get_arg_value_bool(struct action *action, const char *key, bool default_value)
return default_value; return default_value;
} }
static int
get_arg_value_int(struct action *action, const char *key, int default_value)
{
assert(key);
struct action_arg *arg;
wl_list_for_each(arg, &action->args, link) {
if (!arg->key) {
continue;
}
if (!strcasecmp(key, arg->key)) {
assert(arg->type == LAB_ACTION_ARG_INT);
return ((struct action_arg_int *)arg)->value;
}
}
return default_value;
}
static struct action_arg * static struct action_arg *
action_get_first_arg(struct action *action) action_get_first_arg(struct action *action)
{ {