| /* SPDX-License-Identifier: GPL-2.0 */ |
| #ifndef __JSMN_H_ |
| #define __JSMN_H_ |
| |
| /* |
| * JSON type identifier. Basic types are: |
| * o Object |
| * o Array |
| * o String |
| * o Other primitive: number, boolean (true/false) or null |
| */ |
| typedef enum { |
| JSMN_PRIMITIVE = 0, |
| JSMN_OBJECT = 1, |
| JSMN_ARRAY = 2, |
| JSMN_STRING = 3 |
| } jsmntype_t; |
| |
| typedef enum { |
| /* Not enough tokens were provided */ |
| JSMN_ERROR_NOMEM = -1, |
| /* Invalid character inside JSON string */ |
| JSMN_ERROR_INVAL = -2, |
| /* The string is not a full JSON packet, more bytes expected */ |
| JSMN_ERROR_PART = -3, |
| /* Everything was fine */ |
| JSMN_SUCCESS = 0 |
| } jsmnerr_t; |
| |
| /* |
| * JSON token description. |
| * @param type type (object, array, string etc.) |
| * @param start start position in JSON data string |
| * @param end end position in JSON data string |
| */ |
| typedef struct { |
| jsmntype_t type; |
| int start; |
| int end; |
| int size; |
| } jsmntok_t; |
| |
| /* |
| * JSON parser. Contains an array of token blocks available. Also stores |
| * the string being parsed now and current position in that string |
| */ |
| typedef struct { |
| unsigned int pos; /* offset in the JSON string */ |
| int toknext; /* next token to allocate */ |
| int toksuper; /* superior token node, e.g parent object or array */ |
| } jsmn_parser; |
| |
| /* |
| * Create JSON parser over an array of tokens |
| */ |
| void jsmn_init(jsmn_parser *parser); |
| |
| /* |
| * Run JSON parser. It parses a JSON data string into and array of tokens, |
| * each describing a single JSON object. |
| */ |
| jsmnerr_t jsmn_parse(jsmn_parser *parser, const char *js, |
| size_t len, |
| jsmntok_t *tokens, unsigned int num_tokens); |
| |
| const char *jsmn_strerror(jsmnerr_t err); |
| |
| #endif /* __JSMN_H_ */ |