in Gems/AWSCore/Code/Source/Framework/JsonObjectHandler.cpp [370:465]
AZStd::string GetParseErrorMessage(const rapidjson::ParseResult& result, JsonInputStream& stream)
{
AZStd::string msg;
switch (result.Code())
{
case rapidjson::kParseErrorNone:
msg = "No error";
break;
case rapidjson::kParseErrorDocumentEmpty:
msg = "The document is empty";
break;
case rapidjson::kParseErrorDocumentRootNotSingular:
msg = "The document root must not follow by other values";
break;
case rapidjson::kParseErrorValueInvalid:
msg = "Invalid value";
break;
case rapidjson::kParseErrorObjectMissName:
msg = "Missing a name for object member";
break;
case rapidjson::kParseErrorObjectMissColon:
msg = "Missing a colon after a name of object member";
break;
case rapidjson::kParseErrorObjectMissCommaOrCurlyBracket:
msg = "Missing a comma or '}' after an object member";
break;
case rapidjson::kParseErrorArrayMissCommaOrSquareBracket:
msg = "Missing a comma or ']' after an array element";
break;
case rapidjson::kParseErrorStringUnicodeEscapeInvalidHex:
msg = "Incorrect hex digit after \\u escape in string";
break;
case rapidjson::kParseErrorStringUnicodeSurrogateInvalid:
msg = "The surrogate pair in string is invalid";
break;
case rapidjson::kParseErrorStringEscapeInvalid:
msg = "Invalid escape character in string";
break;
case rapidjson::kParseErrorStringMissQuotationMark:
msg = "Missing a closing quotation mark in string";
break;
case rapidjson::kParseErrorStringInvalidEncoding:
msg = "Invalid encoding in string";
break;
case rapidjson::kParseErrorNumberTooBig:
msg = "Number too big to be stored in double";
break;
case rapidjson::kParseErrorNumberMissFraction:
msg = "Miss fraction part in number";
break;
case rapidjson::kParseErrorNumberMissExponent:
msg = "Miss exponent in number";
break;
case rapidjson::kParseErrorTermination:
if (m_errorMessage.empty())
{
msg = "Parsing terminated";
}
else
{
msg = m_errorMessage;
}
break;
case rapidjson::kParseErrorUnspecificSyntaxError:
msg = "Unspecific syntax error";
break;
default:
msg = AZStd::string::format("Unexpected error code %i", result.Code());
break;
}
msg += AZStd::string::format(" at character %zu: ", result.Offset());
const int snippet_size = 40;
int start = static_cast<int>(result.Offset() - snippet_size / 2);
int length = snippet_size;
int offset = snippet_size / 2;
if (start < 0) {
length -= -start;
offset -= -start;
start = 0;
}
AZStd::string snippet = stream.GetContent().substr(start, length);
if (offset >= 0 && offset <= snippet.size())
{
snippet.insert(offset, " <--- ");
}
msg += snippet;
return msg;
}