2020-05-28 20:08:59 +03:00
/* SPDX-License-Identifier: MIT */
2016-09-16 01:24:38 +03:00
# 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_ */