xref: /aosp_15_r20/external/ethtool/json_writer.h (revision 1b481fc3bb1b45d4cf28d1ec12969dc1055f555d)
1*1b481fc3SMaciej Żenczykowski /* SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) */
2*1b481fc3SMaciej Żenczykowski /*
3*1b481fc3SMaciej Żenczykowski  * Simple streaming JSON writer
4*1b481fc3SMaciej Żenczykowski  *
5*1b481fc3SMaciej Żenczykowski  * This takes care of the annoying bits of JSON syntax like the commas
6*1b481fc3SMaciej Żenczykowski  * after elements
7*1b481fc3SMaciej Żenczykowski  *
8*1b481fc3SMaciej Żenczykowski  * Authors:	Stephen Hemminger <[email protected]>
9*1b481fc3SMaciej Żenczykowski  */
10*1b481fc3SMaciej Żenczykowski 
11*1b481fc3SMaciej Żenczykowski #ifndef _JSON_WRITER_H_
12*1b481fc3SMaciej Żenczykowski #define _JSON_WRITER_H_
13*1b481fc3SMaciej Żenczykowski 
14*1b481fc3SMaciej Żenczykowski #include <stdbool.h>
15*1b481fc3SMaciej Żenczykowski #include <stdint.h>
16*1b481fc3SMaciej Żenczykowski 
17*1b481fc3SMaciej Żenczykowski /* Opaque class structure */
18*1b481fc3SMaciej Żenczykowski typedef struct json_writer json_writer_t;
19*1b481fc3SMaciej Żenczykowski 
20*1b481fc3SMaciej Żenczykowski /* Create a new JSON stream */
21*1b481fc3SMaciej Żenczykowski json_writer_t *jsonw_new(FILE *f);
22*1b481fc3SMaciej Żenczykowski /* End output to JSON stream */
23*1b481fc3SMaciej Żenczykowski void jsonw_destroy(json_writer_t **self_p);
24*1b481fc3SMaciej Żenczykowski 
25*1b481fc3SMaciej Żenczykowski /* Cause output to have pretty whitespace */
26*1b481fc3SMaciej Żenczykowski void jsonw_pretty(json_writer_t *self, bool on);
27*1b481fc3SMaciej Żenczykowski 
28*1b481fc3SMaciej Żenczykowski /* Add property name */
29*1b481fc3SMaciej Żenczykowski void jsonw_name(json_writer_t *self, const char *name);
30*1b481fc3SMaciej Żenczykowski 
31*1b481fc3SMaciej Żenczykowski /* Add value  */
32*1b481fc3SMaciej Żenczykowski __attribute__((format(printf, 2, 3)))
33*1b481fc3SMaciej Żenczykowski void jsonw_printf(json_writer_t *self, const char *fmt, ...);
34*1b481fc3SMaciej Żenczykowski void jsonw_string(json_writer_t *self, const char *value);
35*1b481fc3SMaciej Żenczykowski void jsonw_bool(json_writer_t *self, bool value);
36*1b481fc3SMaciej Żenczykowski void jsonw_float(json_writer_t *self, double number);
37*1b481fc3SMaciej Żenczykowski void jsonw_float_fmt(json_writer_t *self, const char *fmt, double num);
38*1b481fc3SMaciej Żenczykowski void jsonw_uint(json_writer_t *self, unsigned int number);
39*1b481fc3SMaciej Żenczykowski void jsonw_u64(json_writer_t *self, uint64_t number);
40*1b481fc3SMaciej Żenczykowski void jsonw_xint(json_writer_t *self, uint64_t number);
41*1b481fc3SMaciej Żenczykowski void jsonw_hhu(json_writer_t *self, unsigned char num);
42*1b481fc3SMaciej Żenczykowski void jsonw_hu(json_writer_t *self, unsigned short number);
43*1b481fc3SMaciej Żenczykowski void jsonw_int(json_writer_t *self, int number);
44*1b481fc3SMaciej Żenczykowski void jsonw_s64(json_writer_t *self, int64_t number);
45*1b481fc3SMaciej Żenczykowski void jsonw_null(json_writer_t *self);
46*1b481fc3SMaciej Żenczykowski void jsonw_luint(json_writer_t *self, unsigned long num);
47*1b481fc3SMaciej Żenczykowski void jsonw_lluint(json_writer_t *self, unsigned long long num);
48*1b481fc3SMaciej Żenczykowski 
49*1b481fc3SMaciej Żenczykowski /* Useful Combinations of name and value */
50*1b481fc3SMaciej Żenczykowski void jsonw_string_field(json_writer_t *self, const char *prop, const char *val);
51*1b481fc3SMaciej Żenczykowski void jsonw_bool_field(json_writer_t *self, const char *prop, bool value);
52*1b481fc3SMaciej Żenczykowski void jsonw_float_field(json_writer_t *self, const char *prop, double num);
53*1b481fc3SMaciej Żenczykowski void jsonw_uint_field(json_writer_t *self, const char *prop, unsigned int num);
54*1b481fc3SMaciej Żenczykowski void jsonw_u64_field(json_writer_t *self, const char *prop, uint64_t num);
55*1b481fc3SMaciej Żenczykowski void jsonw_xint_field(json_writer_t *self, const char *prop, uint64_t num);
56*1b481fc3SMaciej Żenczykowski void jsonw_hhu_field(json_writer_t *self, const char *prop, unsigned char num);
57*1b481fc3SMaciej Żenczykowski void jsonw_hu_field(json_writer_t *self, const char *prop, unsigned short num);
58*1b481fc3SMaciej Żenczykowski void jsonw_int_field(json_writer_t *self, const char *prop, int num);
59*1b481fc3SMaciej Żenczykowski void jsonw_s64_field(json_writer_t *self, const char *prop, int64_t num);
60*1b481fc3SMaciej Żenczykowski void jsonw_null_field(json_writer_t *self, const char *prop);
61*1b481fc3SMaciej Żenczykowski void jsonw_luint_field(json_writer_t *self, const char *prop,
62*1b481fc3SMaciej Żenczykowski 			unsigned long num);
63*1b481fc3SMaciej Żenczykowski void jsonw_lluint_field(json_writer_t *self, const char *prop,
64*1b481fc3SMaciej Żenczykowski 			unsigned long long num);
65*1b481fc3SMaciej Żenczykowski 
66*1b481fc3SMaciej Żenczykowski /* Collections */
67*1b481fc3SMaciej Żenczykowski void jsonw_start_object(json_writer_t *self);
68*1b481fc3SMaciej Żenczykowski void jsonw_end_object(json_writer_t *self);
69*1b481fc3SMaciej Żenczykowski 
70*1b481fc3SMaciej Żenczykowski void jsonw_start_array(json_writer_t *self);
71*1b481fc3SMaciej Żenczykowski void jsonw_end_array(json_writer_t *self);
72*1b481fc3SMaciej Żenczykowski 
73*1b481fc3SMaciej Żenczykowski /* Override default exception handling */
74*1b481fc3SMaciej Żenczykowski typedef void (jsonw_err_handler_fn)(const char *);
75*1b481fc3SMaciej Żenczykowski 
76*1b481fc3SMaciej Żenczykowski #endif /* _JSON_WRITER_H_ */
77