{% if doc_first %}
  @doc "{{ doc_first }}"
{% endif %}  def {{ method_name }}({{ def_args }}) do
    case Native.{{ start_fn }}({{ start_call_args }}) do
      {:ok, handle} ->
        stream =
          Stream.unfold(handle, fn h ->
            case Native.{{ next_fn }}(h) do
              {:ok, nil} ->
                nil

              {:ok, chunk_json} when is_binary(chunk_json) ->
                {Jason.decode!(chunk_json, keys: :atoms), h}

              {:ok, chunk} ->
                {chunk, h}

              {:error, _} ->
                nil
            end
          end)

        {:ok, stream}

      {:error, reason} ->
        {:error, reason}
    end
  end
