private bool ParseValue()

in src/Elastic.Apm/Libraries/Newtonsoft.Json/JsonTextReader.cs [1559:1671]


		private bool ParseValue()
		{
			MiscellaneousUtils.Assert(CharBuffer != null);

			while (true)
			{
				var currentChar = CharBuffer[CharPos];

				switch (currentChar)
				{
					case '\0':
						if (_charsUsed == CharPos)
						{
							if (ReadData(false) == 0) return false;
						}
						else
							CharPos++;
						break;
					case '"':
					case '\'':
						ParseString(currentChar, ReadType.Read);
						return true;
					case 't':
						ParseTrue();
						return true;
					case 'f':
						ParseFalse();
						return true;
					case 'n':
						if (EnsureChars(1, true))
						{
							var next = CharBuffer[CharPos + 1];

							if (next == 'u')
								ParseNull();
							else if (next == 'e')
								ParseConstructor();
							else
								throw CreateUnexpectedCharacterException(CharBuffer[CharPos]);
						}
						else
						{
							CharPos++;
							throw CreateUnexpectedEndException();
						}
						return true;
					case 'N':
						ParseNumberNaN(ReadType.Read);
						return true;
					case 'I':
						ParseNumberPositiveInfinity(ReadType.Read);
						return true;
					case '-':
						if (EnsureChars(1, true) && CharBuffer[CharPos + 1] == 'I')
							ParseNumberNegativeInfinity(ReadType.Read);
						else
							ParseNumber(ReadType.Read);
						return true;
					case '/':
						ParseComment(true);
						return true;
					case 'u':
						ParseUndefined();
						return true;
					case '{':
						CharPos++;
						SetToken(JsonToken.StartObject);
						return true;
					case '[':
						CharPos++;
						SetToken(JsonToken.StartArray);
						return true;
					case ']':
						CharPos++;
						SetToken(JsonToken.EndArray);
						return true;
					case ',':
						// don't increment position, the next call to read will handle comma
						// this is done to handle multiple empty comma values
						SetToken(JsonToken.Undefined);
						return true;
					case ')':
						CharPos++;
						SetToken(JsonToken.EndConstructor);
						return true;
					case StringUtils.CarriageReturn:
						ProcessCarriageReturn(false);
						break;
					case StringUtils.LineFeed:
						ProcessLineFeed();
						break;
					case ' ':
					case StringUtils.Tab:
						// eat
						CharPos++;
						break;
					default:
						if (char.IsWhiteSpace(currentChar))
						{
							// eat
							CharPos++;
							break;
						}
						if (char.IsNumber(currentChar) || currentChar == '-' || currentChar == '.')
						{
							ParseNumber(ReadType.Read);
							return true;
						}

						throw CreateUnexpectedCharacterException(currentChar);
				}
			}
		}