def to_integer(value) do
cond do
value == true -> 1
value == false -> 0
is_integer(value) -> value
is_float(value) -> round(Float.floor(value))
is_iterable(value) -> value |> Stream.map(&to_integer/1)
true ->
case Integer.parse(to_string(value)) do
:error -> value
{int, string} ->
cond do
string == "" -> int
Regex.match?(~r/^\.\d+$/, string) -> int