Files
wireplumber/lib/wp/spa-json.h
George Kiagiadakis d07b6188e5 spa-json: add new "undefined" parser constructor
This allows reading non-standard JSON data that is not a valid JSON
object or array, but can be treated as such.
2024-03-04 07:07:56 +00:00

284 lines
6.4 KiB
C

/* WirePlumber
*
* Copyright © 2022 Collabora Ltd.
* @author Julian Bouzas <julian.bouzas@collabora.com>
*
* SPDX-License-Identifier: MIT
*/
#ifndef __WIREPLUMBER_SPA_JSON_H__
#define __WIREPLUMBER_SPA_JSON_H__
#include <gio/gio.h>
#include "defs.h"
#include "iterator.h"
G_BEGIN_DECLS
struct spa_json;
/*!
* \brief The WpSpaJson GType
* \ingroup wpspajson
*/
#define WP_TYPE_SPA_JSON (wp_spa_json_get_type ())
WP_API
GType wp_spa_json_get_type (void);
typedef struct _WpSpaJson WpSpaJson;
WP_API
WpSpaJson *wp_spa_json_ref (WpSpaJson *self);
WP_API
void wp_spa_json_unref (WpSpaJson *self);
WP_API
WpSpaJson * wp_spa_json_new_from_string (const gchar *json_str);
WP_API
WpSpaJson * wp_spa_json_new_from_stringn (const gchar *json_str, size_t len);
WP_API
WpSpaJson * wp_spa_json_new_wrap_string (const gchar *json_str);
WP_API
WpSpaJson * wp_spa_json_new_wrap_stringn (const gchar *json_str, size_t len);
WP_API
WpSpaJson * wp_spa_json_new_wrap (struct spa_json *json);
WP_API
const struct spa_json * wp_spa_json_get_spa_json (const WpSpaJson *self);
WP_API
const gchar * wp_spa_json_get_data (const WpSpaJson *self);
WP_API
size_t wp_spa_json_get_size (const WpSpaJson *self);
WP_API
gchar * wp_spa_json_to_string (const WpSpaJson *self);
WP_API
WpSpaJson *wp_spa_json_copy (WpSpaJson *other);
WP_API
gboolean wp_spa_json_is_unique_owner (WpSpaJson *self);
WP_API
WpSpaJson *wp_spa_json_ensure_unique_owner (WpSpaJson *self);
WP_API
WpSpaJson *wp_spa_json_new_null (void);
WP_API
WpSpaJson *wp_spa_json_new_boolean (gboolean value);
WP_API
WpSpaJson *wp_spa_json_new_int (gint value);
WP_API
WpSpaJson *wp_spa_json_new_float (float value);
WP_API
WpSpaJson *wp_spa_json_new_string (const gchar *value);
WP_API
WpSpaJson *wp_spa_json_new_array (const gchar *format, ...)
G_GNUC_NULL_TERMINATED;
WP_API
WpSpaJson *wp_spa_json_new_array_valist (const gchar *format, va_list args);
WP_API
WpSpaJson *wp_spa_json_new_object (const gchar *key, const gchar *format, ...)
G_GNUC_NULL_TERMINATED;
WP_API
WpSpaJson *wp_spa_json_new_object_valist (const gchar *key, const gchar *format,
va_list args);
WP_API
gboolean wp_spa_json_is_null (WpSpaJson *self);
WP_API
gboolean wp_spa_json_is_boolean (WpSpaJson *self);
WP_API
gboolean wp_spa_json_is_int (WpSpaJson *self);
WP_API
gboolean wp_spa_json_is_float (WpSpaJson *self);
WP_API
gboolean wp_spa_json_is_string (WpSpaJson *self);
WP_API
gboolean wp_spa_json_is_array (WpSpaJson *self);
WP_API
gboolean wp_spa_json_is_container (WpSpaJson *self);
WP_API
gboolean wp_spa_json_is_object (WpSpaJson *self);
WP_API
gboolean wp_spa_json_parse_boolean (WpSpaJson *self, gboolean *value);
WP_API
gboolean wp_spa_json_parse_int (WpSpaJson *self, gint *value);
WP_API
gboolean wp_spa_json_parse_float (WpSpaJson *self, float *value);
WP_API
gchar *wp_spa_json_parse_string (WpSpaJson *self);
WP_API
gboolean wp_spa_json_parse_array (WpSpaJson *self, ...) G_GNUC_NULL_TERMINATED;
WP_API
gboolean wp_spa_json_parse_array_valist (WpSpaJson *self, va_list args);
WP_API
gboolean wp_spa_json_parse_object (WpSpaJson *self, ...) G_GNUC_NULL_TERMINATED;
WP_API
gboolean wp_spa_json_parse_object_valist (WpSpaJson *self, va_list args);
WP_API
gboolean wp_spa_json_object_get (WpSpaJson *self, ...) G_GNUC_NULL_TERMINATED;
WP_API
gboolean wp_spa_json_object_get_valist (WpSpaJson *self, va_list args);
WP_API
WpIterator *wp_spa_json_new_iterator (WpSpaJson *self);
G_DEFINE_AUTOPTR_CLEANUP_FUNC (WpSpaJson, wp_spa_json_unref)
/*!
* \brief The WpSpaJsonBuilder GType
* \ingroup wpspajson
*/
#define WP_TYPE_SPA_JSON_BUILDER (wp_spa_json_builder_get_type ())
WP_API
GType wp_spa_json_builder_get_type (void);
typedef struct _WpSpaJsonBuilder WpSpaJsonBuilder;
WP_API
WpSpaJsonBuilder *wp_spa_json_builder_ref (WpSpaJsonBuilder *self);
WP_API
void wp_spa_json_builder_unref (WpSpaJsonBuilder *self);
WP_API
WpSpaJsonBuilder *wp_spa_json_builder_new_array (void);
WP_API
WpSpaJsonBuilder *wp_spa_json_builder_new_object (void);
WP_API
void wp_spa_json_builder_add_property (WpSpaJsonBuilder *self, const gchar *key);
WP_API
void wp_spa_json_builder_add_null (WpSpaJsonBuilder *self);
WP_API
void wp_spa_json_builder_add_boolean (WpSpaJsonBuilder *self, gboolean value);
WP_API
void wp_spa_json_builder_add_int (WpSpaJsonBuilder *self, gint value);
WP_API
void wp_spa_json_builder_add_float (WpSpaJsonBuilder *self, float value);
WP_API
void wp_spa_json_builder_add_string (WpSpaJsonBuilder *self, const gchar *value);
WP_API
void wp_spa_json_builder_add_json (WpSpaJsonBuilder *self, WpSpaJson *json);
WP_API
void wp_spa_json_builder_add_from_string (WpSpaJsonBuilder *self,
const gchar *json_str);
WP_API
void wp_spa_json_builder_add_from_stringn (WpSpaJsonBuilder *self,
const gchar *json_str, size_t len);
WP_API
void wp_spa_json_builder_add (WpSpaJsonBuilder *self, ...)
G_GNUC_NULL_TERMINATED;
WP_API
void wp_spa_json_builder_add_valist (WpSpaJsonBuilder *self, va_list args);
WP_API
WpSpaJson *wp_spa_json_builder_end (WpSpaJsonBuilder *self);
G_DEFINE_AUTOPTR_CLEANUP_FUNC (WpSpaJsonBuilder, wp_spa_json_builder_unref)
/*!
* \brief The WpSpaJsonParser GType
* \ingroup wpspajson
*/
#define WP_TYPE_SPA_JSON_PARSER (wp_spa_json_parser_get_type ())
WP_API
GType wp_spa_json_parser_get_type (void);
typedef struct _WpSpaJsonParser WpSpaJsonParser;
WP_API
WpSpaJsonParser *wp_spa_json_parser_ref (WpSpaJsonParser *self);
WP_API
void wp_spa_json_parser_unref (WpSpaJsonParser *self);
WP_API
WpSpaJsonParser *wp_spa_json_parser_new_array (WpSpaJson *json);
WP_API
WpSpaJsonParser *wp_spa_json_parser_new_object (WpSpaJson *json);
WP_API
WpSpaJsonParser *wp_spa_json_parser_new_undefined (WpSpaJson *json);
WP_API
gboolean wp_spa_json_parser_get_null (WpSpaJsonParser *self);
WP_API
gboolean wp_spa_json_parser_get_boolean (WpSpaJsonParser *self,
gboolean *value);
WP_API
gboolean wp_spa_json_parser_get_int (WpSpaJsonParser *self, gint *value);
WP_API
gboolean wp_spa_json_parser_get_float (WpSpaJsonParser *self, float *value);
WP_API
gchar *wp_spa_json_parser_get_string (WpSpaJsonParser *self);
WP_API
WpSpaJson *wp_spa_json_parser_get_json (WpSpaJsonParser *self);
WP_API
gboolean wp_spa_json_parser_get (WpSpaJsonParser *self, ...)
G_GNUC_NULL_TERMINATED;
WP_API
gboolean wp_spa_json_parser_get_valist (WpSpaJsonParser *self, va_list args);
WP_API
void wp_spa_json_parser_end (WpSpaJsonParser *self);
G_DEFINE_AUTOPTR_CLEANUP_FUNC (WpSpaJsonParser, wp_spa_json_parser_unref)
G_END_DECLS
#endif