mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.6 KiB
68 lines
1.6 KiB
/* SPDX-License-Identifier: MIT */ |
|
#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_ */
|
|
|