diff options
author | Emmanuele Bassi <ebassi@openedhand.com> | 2007-09-21 21:07:12 +0100 |
---|---|---|
committer | Emmanuele Bassi <ebassi@openedhand.com> | 2007-09-21 21:07:12 +0100 |
commit | c11ebd32f73a1e21d6097bf9eba8e12f7e35497a (patch) | |
tree | 94dee657fce374bb1b44c3362ead937aab7fbb29 /json-glib/json-types.h | |
parent | f661c7e1a04c2fb198279030c9dd812f357240a3 (diff) | |
download | json-glib-c11ebd32f73a1e21d6097bf9eba8e12f7e35497a.tar.gz |
Add JsonData, an opaque container for JSON data types
JsonData is like GValue, but it stores JSON data types (objects and
arrays) and allows us to retrieve them safely. This way we can actually
know the type of the objects returned by the parser and by the other
object walking functions.
Diffstat (limited to 'json-glib/json-types.h')
-rw-r--r-- | json-glib/json-types.h | 53 |
1 files changed, 37 insertions, 16 deletions
diff --git a/json-glib/json-types.h b/json-glib/json-types.h index 28e2c33..f8e61a2 100644 --- a/json-glib/json-types.h +++ b/json-glib/json-types.h @@ -5,27 +5,48 @@ G_BEGIN_DECLS +#define JSON_DATA_TYPE(data) (((JsonData *) (data))->type) #define JSON_TYPE_OBJECT (json_object_get_type ()) #define JSON_TYPE_ARRAY (json_array_get_type ()) typedef struct _JsonObject JsonObject; typedef struct _JsonArray JsonArray; - -JsonObject *json_object_ref (JsonObject *object); -void json_object_unref (JsonObject *object); -GList * json_object_get_members (JsonObject *object); -GValue * json_object_get_member (JsonObject *object, - const gchar *member_name); -gboolean json_object_has_member (JsonObject *object, - const gchar *member_name); -guint json_object_get_size (JsonObject *object); - -JsonArray * json_array_ref (JsonArray *array); -void json_array_unref (JsonArray *array); -GList * json_array_get_elements (JsonArray *array); -GValue * json_array_get_element (JsonArray *array, - guint index_); -guint json_array_get_length (JsonArray *array); +typedef struct _JsonData JsonData; + +typedef enum { + JSON_DATA_OBJECT, + JSON_DATA_ARRAY +} JsonDataType; + +struct _JsonData +{ + /*< private >*/ + JsonDataType type; + + union { + JsonObject *object; + JsonArray *array; + } data; +}; + +JsonObject * json_data_get_object (JsonData *data); +JsonArray * json_data_get_array (JsonData *data); + +JsonObject * json_object_ref (JsonObject *object); +void json_object_unref (JsonObject *object); +GList * json_object_get_members (JsonObject *object); +GValue * json_object_get_member (JsonObject *object, + const gchar *member_name); +gboolean json_object_has_member (JsonObject *object, + const gchar *member_name); +guint json_object_get_size (JsonObject *object); + +JsonArray * json_array_ref (JsonArray *array); +void json_array_unref (JsonArray *array); +GList * json_array_get_elements (JsonArray *array); +GValue * json_array_get_element (JsonArray *array, + guint index_); +guint json_array_get_length (JsonArray *array); G_END_DECLS |