Current section
Files
Jump to
Current section
Files
lib/exjprop/validators.ex
defmodule Exjprop.Validators do
@doc """
Require a property
"""
def required({:error, _error} = tuple), do: tuple
def required({:ok, nil}), do: {:error, {nil, "cannot be nil"}}
def required({:ok, _value} = tuple), do: tuple
@doc """
If the property is non-nil, parse it to an integer
"""
def integer({:error, _error} = tuple), do: tuple
def integer({:ok, nil} = tuple), do: tuple
def integer({:ok, int} = tuple) when is_integer(int), do: tuple
def integer({:ok, string}) when is_binary(string), do: handle_str_to_int(Integer.parse(string), string)
def integer({:ok, float}) when is_float(float), do: {:ok, trunc(float)}
def integer({:ok, value}), do: {:error, value}
@doc """
If the property is non-nil, parse it to a float
"""
def float({:error, _error} = tuple), do: tuple
def float({:ok, nil} = tuple), do: tuple
def float({:ok, int}) when is_integer(int), do: {:ok, int / 1}
def float({:ok, string}) when is_binary(string), do: {:ok, String.to_float(string)}
def float({:ok, value}), do: {:error, value}
defp handle_str_to_int(:error, string), do: {:error, {string, "error parsing int"}}
defp handle_str_to_int({int, _remainder}, _string), do: {:ok, int}
end