1/*
2 * Copyright © 2021 Benjamin Otte
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
16 *
17 * Authors: Benjamin Otte <otte@gnome.org>
18 */
19
20
21#ifndef __GTK_JSON_PARSER_H__
22#define __GTK_JSON_PARSER_H__
23
24#include <glib.h>
25
26G_BEGIN_DECLS
27
28typedef enum {
29 GTK_JSON_NONE,
30 GTK_JSON_NULL,
31 GTK_JSON_BOOLEAN,
32 GTK_JSON_NUMBER,
33 GTK_JSON_STRING,
34 GTK_JSON_OBJECT,
35 GTK_JSON_ARRAY
36} GtkJsonNode;
37
38typedef enum {
39 GTK_JSON_ERROR_FAILED,
40 GTK_JSON_ERROR_SYNTAX,
41 GTK_JSON_ERROR_TYPE,
42 GTK_JSON_ERROR_VALUE,
43 GTK_JSON_ERROR_SCHEMA,
44} GtkJsonError;
45
46typedef struct _GtkJsonParser GtkJsonParser;
47
48#define GTK_JSON_ERROR (gtk_json_error_quark ())
49GQuark gtk_json_error_quark (void);
50
51GtkJsonParser * gtk_json_parser_new_for_bytes (GBytes *bytes);
52GtkJsonParser * gtk_json_parser_new_for_string (const char *string,
53 gssize size);
54
55void gtk_json_parser_free (GtkJsonParser *self);
56
57gboolean gtk_json_parser_next (GtkJsonParser *self);
58void gtk_json_parser_rewind (GtkJsonParser *self);
59gsize gtk_json_parser_get_depth (GtkJsonParser *self);
60GtkJsonNode gtk_json_parser_get_node (GtkJsonParser *self);
61char * gtk_json_parser_get_member_name (GtkJsonParser *self);
62gboolean gtk_json_parser_has_member (GtkJsonParser *self,
63 const char *name);
64gboolean gtk_json_parser_find_member (GtkJsonParser *self,
65 const char *name);
66gssize gtk_json_parser_select_member (GtkJsonParser *self,
67 const char * const *options);
68
69gboolean gtk_json_parser_get_boolean (GtkJsonParser *self);
70double gtk_json_parser_get_number (GtkJsonParser *self);
71int gtk_json_parser_get_int (GtkJsonParser *self);
72guint gtk_json_parser_get_uint (GtkJsonParser *self);
73char * gtk_json_parser_get_string (GtkJsonParser *self);
74gssize gtk_json_parser_select_string (GtkJsonParser *self,
75 const char * const *options);
76
77gboolean gtk_json_parser_start_object (GtkJsonParser *self);
78gboolean gtk_json_parser_start_array (GtkJsonParser *self);
79gboolean gtk_json_parser_end (GtkJsonParser *self);
80
81const GError * gtk_json_parser_get_error (GtkJsonParser *self) G_GNUC_PURE;
82void gtk_json_parser_get_error_offset (GtkJsonParser *self,
83 gsize *start,
84 gsize *end);
85void gtk_json_parser_get_error_location (GtkJsonParser *self,
86 gsize *start_line,
87 gsize *start_line_bytes,
88 gsize *end_line,
89 gsize *end_line_bytes);
90void gtk_json_parser_value_error (GtkJsonParser *self,
91 const char *format,
92 ...) G_GNUC_PRINTF(2, 3);
93void gtk_json_parser_schema_error (GtkJsonParser *self,
94 const char *format,
95 ...) G_GNUC_PRINTF(2, 3);
96
97G_END_DECLS
98
99#endif /* __GTK_JSON_PARSER_H__ */
100

source code of gtk/subprojects/pango/pango/json/gtkjsonparserprivate.h