linux/tools/perf/pmu-events/jsmn.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef __JSMN_H_
   3#define __JSMN_H_
   4
   5/*
   6 * JSON type identifier. Basic types are:
   7 *      o Object
   8 *      o Array
   9 *      o String
  10 *      o Other primitive: number, boolean (true/false) or null
  11 */
  12typedef enum {
  13        JSMN_PRIMITIVE = 0,
  14        JSMN_OBJECT = 1,
  15        JSMN_ARRAY = 2,
  16        JSMN_STRING = 3
  17} jsmntype_t;
  18
  19typedef enum {
  20        /* Not enough tokens were provided */
  21        JSMN_ERROR_NOMEM = -1,
  22        /* Invalid character inside JSON string */
  23        JSMN_ERROR_INVAL = -2,
  24        /* The string is not a full JSON packet, more bytes expected */
  25        JSMN_ERROR_PART = -3,
  26        /* Everything was fine */
  27        JSMN_SUCCESS = 0
  28} jsmnerr_t;
  29
  30/*
  31 * JSON token description.
  32 * @param               type    type (object, array, string etc.)
  33 * @param               start   start position in JSON data string
  34 * @param               end             end position in JSON data string
  35 */
  36typedef struct {
  37        jsmntype_t type;
  38        int start;
  39        int end;
  40        int size;
  41} jsmntok_t;
  42
  43/*
  44 * JSON parser. Contains an array of token blocks available. Also stores
  45 * the string being parsed now and current position in that string
  46 */
  47typedef struct {
  48        unsigned int pos; /* offset in the JSON string */
  49        int toknext; /* next token to allocate */
  50        int toksuper; /* superior token node, e.g parent object or array */
  51} jsmn_parser;
  52
  53/*
  54 * Create JSON parser over an array of tokens
  55 */
  56void jsmn_init(jsmn_parser *parser);
  57
  58/*
  59 * Run JSON parser. It parses a JSON data string into and array of tokens,
  60 * each describing a single JSON object.
  61 */
  62jsmnerr_t jsmn_parse(jsmn_parser *parser, const char *js,
  63                     size_t len,
  64                     jsmntok_t *tokens, unsigned int num_tokens);
  65
  66const char *jsmn_strerror(jsmnerr_t err);
  67
  68#endif /* __JSMN_H_ */
  69