lib/sink/write_lines.ex
defmodule Strom.Sink.WriteLines do
@behaviour Strom.Sink
defstruct path: nil, file: nil
@line_sep "\n"
@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 <> @line_sep)
{:ok, {[], write_lines}}
end
@impl true
def stop(%__MODULE__{} = write_lines) do
%{write_lines | file: File.close(write_lines.file)}
end
end