Files
archived-hipudding-teslamate/lib/teslamate/import/csv.ex
2020-10-04 12:32:47 +02:00

31 lines
661 B
Elixir

defmodule TeslaMate.Import.CSV do
NimbleCSV.define(Parser, separator: ",", escape: "\"", newlines: ["\r\n", "\n"])
def parse(file_stream) do
file_stream
|> Parser.parse_stream(skip_headers: false)
|> Enum.take(2)
|> case do
[[_], _] ->
{:error, :unsupported_delimiter}
[] ->
{:error, :no_contents}
[_] ->
{:error, :no_contents}
[headers, _] ->
rows =
file_stream
|> Parser.parse_stream()
|> Stream.flat_map(fn
[""] -> []
row -> [headers |> Enum.zip(row) |> Enum.into(%{})]
end)
{:ok, rows}
end
end
end