in sdk/src/azure/core/az_json_reader.c [819:872]
AZ_NODISCARD static az_result _az_json_reader_process_next_byte(
az_json_reader* ref_json_reader,
uint8_t next_byte)
{
// Extra data after a single JSON value (complete object or array or one primitive value) is
// invalid. Expected end of data.
if (ref_json_reader->_internal.bit_stack._internal.current_depth == 0)
{
return AZ_ERROR_UNEXPECTED_CHAR;
}
bool within_object
= _az_json_stack_peek(&ref_json_reader->_internal.bit_stack) == _az_JSON_STACK_OBJECT;
if (next_byte == ',')
{
ref_json_reader->_internal.bytes_consumed++;
az_span json = _az_json_reader_skip_whitespace(ref_json_reader);
// Expected start of a property name or value, but instead reached end of data.
if (az_span_size(json) < 1)
{
return AZ_ERROR_UNEXPECTED_END;
}
next_byte = az_span_ptr(json)[0];
if (within_object)
{
// Expected start of a property name after the comma since we are within a JSON object.
if (next_byte != '"')
{
return AZ_ERROR_UNEXPECTED_CHAR;
}
return _az_json_reader_process_property_name(ref_json_reader);
}
return _az_json_reader_process_value(ref_json_reader, next_byte);
}
if (next_byte == '}')
{
return _az_json_reader_process_container_end(ref_json_reader, AZ_JSON_TOKEN_END_OBJECT);
}
if (next_byte == ']')
{
return _az_json_reader_process_container_end(ref_json_reader, AZ_JSON_TOKEN_END_ARRAY);
}
// No other character is a valid token delimiter within JSON.
return AZ_ERROR_UNEXPECTED_CHAR;
}