linux/tools/bpf/bpftool/json_writer.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
   2/*
   3 * Simple streaming JSON writer
   4 *
   5 * This takes care of the annoying bits of JSON syntax like the commas
   6 * after elements
   7 *
   8 * Authors:     Stephen Hemminger <stephen@networkplumber.org>
   9 */
  10
  11#ifndef _JSON_WRITER_H_
  12#define _JSON_WRITER_H_
  13
  14#include <stdbool.h>
  15#include <stdint.h>
  16#include <stdarg.h>
  17#include <linux/compiler.h>
  18
  19/* Opaque class structure */
  20typedef struct json_writer json_writer_t;
  21
  22/* Create a new JSON stream */
  23json_writer_t *jsonw_new(FILE *f);
  24/* End output to JSON stream */
  25void jsonw_destroy(json_writer_t **self_p);
  26
  27/* Cause output to have pretty whitespace */
  28void jsonw_pretty(json_writer_t *self, bool on);
  29
  30/* Reset separator to create new JSON */
  31void jsonw_reset(json_writer_t *self);
  32
  33/* Add property name */
  34void jsonw_name(json_writer_t *self, const char *name);
  35
  36/* Add value  */
  37void __printf(2, 0) jsonw_vprintf_enquote(json_writer_t *self, const char *fmt,
  38                                          va_list ap);
  39void __printf(2, 3) jsonw_printf(json_writer_t *self, const char *fmt, ...);
  40void jsonw_string(json_writer_t *self, const char *value);
  41void jsonw_bool(json_writer_t *self, bool value);
  42void jsonw_float(json_writer_t *self, double number);
  43void jsonw_float_fmt(json_writer_t *self, const char *fmt, double num);
  44void jsonw_uint(json_writer_t *self, uint64_t number);
  45void jsonw_hu(json_writer_t *self, unsigned short number);
  46void jsonw_int(json_writer_t *self, int64_t number);
  47void jsonw_null(json_writer_t *self);
  48void jsonw_lluint(json_writer_t *self, unsigned long long int num);
  49
  50/* Useful Combinations of name and value */
  51void jsonw_string_field(json_writer_t *self, const char *prop, const char *val);
  52void jsonw_bool_field(json_writer_t *self, const char *prop, bool value);
  53void jsonw_float_field(json_writer_t *self, const char *prop, double num);
  54void jsonw_uint_field(json_writer_t *self, const char *prop, uint64_t num);
  55void jsonw_hu_field(json_writer_t *self, const char *prop, unsigned short num);
  56void jsonw_int_field(json_writer_t *self, const char *prop, int64_t num);
  57void jsonw_null_field(json_writer_t *self, const char *prop);
  58void jsonw_lluint_field(json_writer_t *self, const char *prop,
  59                        unsigned long long int num);
  60void jsonw_float_field_fmt(json_writer_t *self, const char *prop,
  61                           const char *fmt, double val);
  62
  63/* Collections */
  64void jsonw_start_object(json_writer_t *self);
  65void jsonw_end_object(json_writer_t *self);
  66
  67void jsonw_start_array(json_writer_t *self);
  68void jsonw_end_array(json_writer_t *self);
  69
  70/* Override default exception handling */
  71typedef void (jsonw_err_handler_fn)(const char *);
  72
  73#endif /* _JSON_WRITER_H_ */
  74