lib/exiffer/protocols/serialize.ex

defprotocol Exiffer.Serialize do
  @doc "Serialize image data"
  def write(data, io_device)
  def binary(data)
  def text(data)
end

defimpl Exiffer.Serialize, for: List do
  def write(list, io_device) do
    Enum.each(list, fn item ->
      Exiffer.Serialize.write(item, io_device)
    end)
    :ok
  end

  def binary(list) do
    Enum.map(list, fn item ->
      Exiffer.Serialize.binary(item)
    end)
    |> Enum.join()
  end

  def text(list) do
    Enum.map(list, fn item ->
      Exiffer.Serialize.text(item)
    end)
    |> Enum.join("\n")
  end
end