json: Add gtk_json_parser_select_member()
This is modeled after JsonReader.selectName() from the Java Moshi package, see https://square.github.io/moshi/1.x/moshi/com/squareup/moshi/JsonReader.html#selectName-com.squareup.moshi.JsonReader.Options- It returns the ID of the current member name in the passed i char array or -1 if it is not found. This allows writing code like: do { switch (gtk_json_parser_select_member (parser, { "foo", "bar", NULL }) { case 0: /* handle the "foo" member */ break; case 1: /* handle the "bar" member */ break; default: /* do nothing or complain or whatever */ break; } } while (gtk_json_parser_next (parser)); The impementation so far is the simplest one possible, but could be significantly improved.
This commit is contained in:
@@ -873,6 +873,30 @@ gtk_json_parser_get_member_name (GtkJsonParser *self)
|
||||
return gtk_json_unescape_string (self->block->member_name);
|
||||
}
|
||||
|
||||
gssize
|
||||
gtk_json_parser_select_member (GtkJsonParser *self,
|
||||
const char * const *options)
|
||||
{
|
||||
char *member_name;
|
||||
gssize i;
|
||||
|
||||
member_name = gtk_json_parser_get_member_name (self);
|
||||
if (member_name == NULL)
|
||||
return -1;
|
||||
|
||||
for (i = 0; options[i]; i++)
|
||||
{
|
||||
if (strcmp (member_name, options[i]) == 0)
|
||||
break;
|
||||
}
|
||||
if (options[i] == NULL)
|
||||
i = -1;
|
||||
|
||||
g_free (member_name);
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gtk_json_parser_get_boolean (GtkJsonParser *self)
|
||||
{
|
||||
|
||||
@@ -47,6 +47,8 @@ gboolean gtk_json_parser_next (GtkJsonParser
|
||||
GtkJsonNode gtk_json_parser_get_node (GtkJsonParser *self);
|
||||
const GError * gtk_json_parser_get_error (GtkJsonParser *self) G_GNUC_PURE;
|
||||
char * gtk_json_parser_get_member_name (GtkJsonParser *self);
|
||||
gssize gtk_json_parser_select_member (GtkJsonParser *self,
|
||||
const char * const *options);
|
||||
|
||||
gboolean gtk_json_parser_get_boolean (GtkJsonParser *self);
|
||||
double gtk_json_parser_get_number (GtkJsonParser *self);
|
||||
|
||||
Reference in New Issue
Block a user