Current section
Files
Jump to
Current section
Files
lib/jes.ex
defmodule Jes do
@moduledoc """
Documentation for `Jes`.
"""
alias __MODULE__.Resource
def decode(stream, opts \\ []) do
max_string_chunk_size = Keyword.get(opts, :max_string_chunk_size, 1024)
Stream.resource(
fn ->
{:ok, pid} =
GenServer.start_link(Resource, [stream, max_string_chunk_size: max_string_chunk_size])
{pid, false}
end,
fn
{pid, true} ->
{:halt, {pid, true}}
{pid, false} ->
events = Resource.decode_some_more(pid)
case events do
[] ->
{:halt, {pid, true}}
_ ->
if Enum.all?(events, &(&1[:error] != nil)) do
{events, {pid, true}}
else
{events, {pid, false}}
end
end
end,
fn {pid, _} -> :ok = GenServer.stop(pid) end
)
end
end