Current section
Files
Jump to
Current section
Files
lib/scrc/data_parser.ex
defmodule Scrc.DataParser do
@moduledoc """
This is the DataParser module. It implements parsing of SCRC data into native types.
"""
require Logger
def parse(list, :float, _opts), do: parse_float_value(list)
def parse(list, [:float], _opts), do: parse_float_values(list)
def parse(list, {:float}, _opts), do: List.to_tuple(parse_float_values(list))
def parse(list, :integer, _opts), do: parse_integer_value(list)
def parse(list, [:integer], _opts), do: parse_integer_values(list)
def parse(_list, type, _opts), do: raise(ArgumentError, "Missing parse function for #{inspect(type)}")
defp parse_float_value(list) do
list
|> parse_float_values
|> List.first
end
defp parse_float_values(list) do
list
|> Enum.map(&to_number/1)
end
defp parse_integer_value(list) do
list
|> parse_integer_values
|> List.first
end
defp parse_integer_values(list) do
list
|> Enum.map(&to_number/1)
|> Enum.map(&Kernel.trunc/1)
end
defp to_number(string) when is_binary(string) do
{float, _} = Scrc.parse_number(string)
float
end
end