AZ_NODISCARD static az_result _az_json_reader_process_next_byte()

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;
}