AZStd::string GetParseErrorMessage()

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;

        }