Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
867a979a AK |
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 | */ | |
12 | typedef enum { | |
13 | JSMN_PRIMITIVE = 0, | |
14 | JSMN_OBJECT = 1, | |
15 | JSMN_ARRAY = 2, | |
16 | JSMN_STRING = 3 | |
17 | } jsmntype_t; | |
18 | ||
19 | typedef 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 | */ | |
36 | typedef 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 | */ | |
47 | typedef 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 | */ | |
56 | void 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 | */ | |
62 | jsmnerr_t jsmn_parse(jsmn_parser *parser, const char *js, | |
63 | size_t len, | |
64 | jsmntok_t *tokens, unsigned int num_tokens); | |
65 | ||
66 | const char *jsmn_strerror(jsmnerr_t err); | |
67 | ||
68 | #endif /* __JSMN_H_ */ |