lib/sink/io_puts.ex

defmodule Strom.Sink.IOPuts do
  @moduledoc "Sink to IO"
  @behaviour Strom.Sink

  defstruct line_sep: "", prefix: ""

  def new(prefix \\ "", line_sep \\ ""), do: %__MODULE__{line_sep: line_sep, prefix: prefix}

  @impl true
  def start(%__MODULE__{} = io_puts), do: io_puts

  @impl true
  def call(%__MODULE__{} = io_puts, data) do
    IO.puts(io_puts.prefix <> "#{data}" <> io_puts.line_sep)

    io_puts
  end

  @impl true
  def stop(%__MODULE__{} = io_puts), do: io_puts
end