defmodule Strom.Sink.WriteLines do @behaviour Strom.Sink @line_sep "\n" defstruct path: nil, file: nil, line_sep: @line_sep def new(path, line_sep \\ @line_sep) when is_binary(path) and is_binary(line_sep) do %__MODULE__{path: path, line_sep: line_sep} end @impl true def start(%__MODULE__{} = write_lines) do file = File.open!(write_lines.path, [:write]) %{write_lines | file: file} end @impl true def call(%__MODULE__{} = write_lines, data) do :ok = IO.write(write_lines.file, data <> write_lines.line_sep) {:ok, {[], write_lines}} end @impl true def stop(%__MODULE__{} = write_lines) do %{write_lines | file: File.close(write_lines.file)} end end