defmodule Strom.Source.Events do @behaviour Strom.Source defstruct infinite: false, events: [] def new(events) when is_list(events), do: %__MODULE__{events: events} @impl true def start(%__MODULE__{} = state), do: state @impl true def call(%__MODULE__{events: events} = state) do case events do [hd | tl] -> {:ok, {[hd], %{state | events: tl}}} [] -> {:error, {:halt, state}} end end @impl true def stop(%__MODULE__{} = stream), do: stream @impl true def infinite?(%__MODULE__{infinite: infinite}), do: infinite end