Here you have it with error handling
defmodule Hello do
def run(string) do
{:ok, do_run(string)}
catch
:throw, error -> {:error, error}
end
defp do_run("--"), do: {:latFrame, -1}
defp do_run("++"), do: {:latFrame, 1}
defp do_run("-*"), do: {:latEnd, -1}
defp do_run("+*"), do: {:latEnd, 1}
defp do_run(<<"+", number::binary>>), do: {:lon, to_integer(number)}
defp do_run(<<"-", number::binary>>), do: {:lat, -to_integer(number)}
defp do_run(<<"+", number::binary>>), do: {:lon, to_integer(number)}
defp do_run(number), do: {:gridNum, to_integer(number)}
defp to_integer(string) do
case Integer.parse(string) do
{num, ""} -> num
_ -> throw({:not_number, string})
end
end
end






















