All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Pages
error.h
1
#ifndef RAPIDJSON_ERROR_ERROR_H__
2
#define RAPIDJSON_ERROR_ERROR_H__
3
4
///////////////////////////////////////////////////////////////////////////////
5
// RAPIDJSON_ERROR_CHARTYPE
6
7
//! Character type of error messages.
8
/*! The default charater type is char.
9
On Windows, user can define this macro as TCHAR for supporting both
10
unicode/non-unicode settings.
11
*/
12
#ifndef RAPIDJSON_ERROR_CHARTYPE
13
#define RAPIDJSON_ERROR_CHARTYPE char
14
#endif
15
16
///////////////////////////////////////////////////////////////////////////////
17
// RAPIDJSON_ERROR_STRING
18
19
//! Macro for converting string literial to RAPIDJSON_ERROR_CHARTYPE[].
20
/*! By default this conversion macro does nothing.
21
On Windows, user can define this macro as _T(x) for supporting both
22
unicode/non-unicode settings.
23
*/
24
#ifndef RAPIDJSON_ERROR_STRING
25
#define RAPIDJSON_ERROR_STRING(x) x
26
#endif
27
28
namespace
rapidjson {
29
30
///////////////////////////////////////////////////////////////////////////////
31
// ParseErrorCode
32
33
//! Error code of parsing.
34
/*! \see GenericReader::Parse, GenericReader::GetParseErrorCode
35
*/
36
enum
ParseErrorCode
{
37
kParseErrorNone
= 0,
//!< No error.
38
39
kParseErrorDocumentEmpty
,
//!< The document is empty.
40
kParseErrorDocumentRootNotObjectOrArray
,
//!< The document root must be either object or array.
41
kParseErrorDocumentRootNotSingular
,
//!< The document root must not follow by other values.
42
43
kParseErrorValueInvalid
,
//!< Invalid value.
44
45
kParseErrorObjectMissName
,
//!< Missing a name for object member.
46
kParseErrorObjectMissColon
,
//!< Missing a colon after a name of object member.
47
kParseErrorObjectMissCommaOrCurlyBracket
,
//!< Missing a comma or '}' after an object member.
48
49
kParseErrorArrayMissCommaOrSquareBracket
,
//!< Missing a comma or ']' after an array element.
50
51
kParseErrorStringUnicodeEscapeInvalidHex
,
//!< Incorrect hex digit after \\u escape in string.
52
kParseErrorStringUnicodeSurrogateInvalid
,
//!< The surrogate pair in string is invalid.
53
kParseErrorStringEscapeInvalid
,
//!< Invalid escape character in string.
54
kParseErrorStringMissQuotationMark
,
//!< Missing a closing quotation mark in string.
55
kParseErrorStringInvalidEncoding
,
//!< Invalid encoding in string.
56
57
kParseErrorNumberTooBig
,
//!< Number too big to be stored in double.
58
kParseErrorNumberMissFraction
,
//!< Miss fraction part in number.
59
kParseErrorNumberMissExponent
,
//!< Miss exponent in number.
60
61
kParseErrorTermination
,
//!< Parsing was terminated.
62
kParseErrorUnspecificSyntaxError
,
//!< Unspecific syntax error.
63
};
64
65
//! Result of parsing (wraps ParseErrorCode)
66
/*!
67
\code
68
Document doc;
69
ParseResult ok = doc.Parse("[42]");
70
if (!ok) {
71
fprintf(stderr, "JSON parse error: %s (%u)",
72
GetParseError_En(ok.Code()), ok.Offset());
73
exit(EXIT_FAILURE);
74
}
75
\endcode
76
\see GenericReader::Parse, GenericDocument::Parse
77
*/
78
struct
ParseResult
{
79
80
//! Default constructor, no error.
81
ParseResult
() : code_(
kParseErrorNone
), offset_(0) {}
82
//! Constructor to set an error.
83
ParseResult
(
ParseErrorCode
code,
size_t
offset) : code_(code), offset_(offset) {}
84
85
//! Get the error code.
86
ParseErrorCode
Code
()
const
{
return
code_; }
87
//! Get the error offset, if \ref IsError(), 0 otherwise.
88
size_t
Offset
()
const
{
return
offset_; }
89
90
//! Conversion to \c bool, returns \c true, iff !\ref IsError().
91
operator
bool()
const
{
return
!
IsError
(); }
92
//! Whether the result is an error.
93
bool
IsError
()
const
{
return
code_ !=
kParseErrorNone
; }
94
95
bool
operator==(
const
ParseResult
& that)
const
{
return
code_ == that.code_; }
96
bool
operator==(
ParseErrorCode
code)
const
{
return
code_ == code; }
97
friend
bool
operator==(
ParseErrorCode
code,
const
ParseResult
& err) {
return
code == err.code_; }
98
99
//! Reset error code.
100
void
Clear
() {
Set
(
kParseErrorNone
); }
101
//! Update error code and offset.
102
void
Set
(
ParseErrorCode
code,
size_t
offset = 0) { code_ = code; offset_ = offset; }
103
104
private
:
105
ParseErrorCode
code_;
106
size_t
offset_;
107
};
108
109
//! Function pointer type of GetParseError().
110
/*! This is the prototype for GetParseError_X(), where X is a locale.
111
User can dynamically change locale in runtime, e.g.:
112
113
\code
114
GetParseErrorFunc GetParseError = GetParseError_En; // or whatever
115
const RAPIDJSON_ERROR_CHARTYPE* s = GetParseError(document.GetParseErrorCode());
116
\endcode
117
*/
118
119
typedef
const
RAPIDJSON_ERROR_CHARTYPE* (*GetParseErrorFunc)(
ParseErrorCode
);
120
121
}
// namespace rapidjson
122
123
#endif // RAPIDJSON_ERROR_ERROR_H__
include
rapidjson
error
error.h