diff options
Diffstat (limited to 'src/include/common/jsonapi.h')
-rw-r--r-- | src/include/common/jsonapi.h | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/include/common/jsonapi.h b/src/include/common/jsonapi.h index 8d31630e5ce..663064e659d 100644 --- a/src/include/common/jsonapi.h +++ b/src/include/common/jsonapi.h @@ -16,7 +16,7 @@ #include "lib/stringinfo.h" -typedef enum +typedef enum JsonTokenType { JSON_TOKEN_INVALID, JSON_TOKEN_STRING, @@ -33,7 +33,7 @@ typedef enum JSON_TOKEN_END } JsonTokenType; -typedef enum +typedef enum JsonParseErrorType { JSON_SUCCESS, JSON_ESCAPING_INVALID, @@ -52,7 +52,8 @@ typedef enum JSON_UNICODE_ESCAPE_FORMAT, JSON_UNICODE_HIGH_ESCAPE, JSON_UNICODE_HIGH_SURROGATE, - JSON_UNICODE_LOW_SURROGATE + JSON_UNICODE_LOW_SURROGATE, + JSON_SEM_ACTION_FAILED /* error should already be reported */ } JsonParseErrorType; @@ -84,14 +85,15 @@ typedef struct JsonLexContext StringInfo strval; } JsonLexContext; -typedef void (*json_struct_action) (void *state); -typedef void (*json_ofield_action) (void *state, char *fname, bool isnull); -typedef void (*json_aelem_action) (void *state, bool isnull); -typedef void (*json_scalar_action) (void *state, char *token, JsonTokenType tokentype); +typedef JsonParseErrorType (*json_struct_action) (void *state); +typedef JsonParseErrorType (*json_ofield_action) (void *state, char *fname, bool isnull); +typedef JsonParseErrorType (*json_aelem_action) (void *state, bool isnull); +typedef JsonParseErrorType (*json_scalar_action) (void *state, char *token, JsonTokenType tokentype); /* * Semantic Action structure for use in parsing json. + * * Any of these actions can be NULL, in which case nothing is done at that * point, Likewise, semstate can be NULL. Using an all-NULL structure amounts * to doing a pure parse with no side-effects, and is therefore exactly @@ -100,6 +102,11 @@ typedef void (*json_scalar_action) (void *state, char *token, JsonTokenType toke * The 'fname' and 'token' strings passed to these actions are palloc'd. * They are not free'd or used further by the parser, so the action function * is free to do what it wishes with them. + * + * All action functions return JsonParseErrorType. If the result isn't + * JSON_SUCCESS, the parse is abandoned and that error code is returned. + * If it is JSON_SEM_ACTION_FAILED, the action function is responsible + * for having reported the error in some appropriate way. */ typedef struct JsonSemAction { |