| 
 | 1 | +defmodule Validatex.Validators do  | 
 | 2 | + @moduledoc """  | 
 | 3 | + This module provides a few functions for validating data.  | 
 | 4 | + """  | 
 | 5 | + | 
 | 6 | + @type raw() :: String.t()  | 
 | 7 | + @type error_msg() :: String.t()  | 
 | 8 | + | 
 | 9 | + defguard raw?(str) when is_binary(str)  | 
 | 10 | + defguard error_msg?(msg) when is_binary(msg)  | 
 | 11 | + | 
 | 12 | + @spec not_empty?(raw(), error_msg()) :: Result.t(error_msg(), raw())  | 
 | 13 | + def not_empty?("", msg) when is_binary(msg) do  | 
 | 14 | + {:error, msg}  | 
 | 15 | + end  | 
 | 16 | + | 
 | 17 | + def not_empty?(value, _) when is_binary(value) do  | 
 | 18 | + {:ok, value}  | 
 | 19 | + end  | 
 | 20 | + | 
 | 21 | + @spec range(raw(), integer(), integer(), error_msg()) :: Result.t(error_msg(), raw())  | 
 | 22 | + def range(value, min, max, msg)  | 
 | 23 | + when is_binary(value) and is_integer(min) and is_integer(max) and is_binary(msg) do  | 
 | 24 | + if String.length(value) in min..max do  | 
 | 25 | + {:ok, value}  | 
 | 26 | + else  | 
 | 27 | + {:error, msg}  | 
 | 28 | + end  | 
 | 29 | + end  | 
 | 30 | + | 
 | 31 | + @spec integer(raw(), 2..36, error_msg()) :: Result.t(error_msg(), integer())  | 
 | 32 | + def integer(value, base \\ 10, msg) when raw?(value) and is_integer(base) and error_msg?(msg) do  | 
 | 33 | + case Integer.parse(value, base) do  | 
 | 34 | + {i, ""} ->  | 
 | 35 | + {:ok, i}  | 
 | 36 | + | 
 | 37 | + _ ->  | 
 | 38 | + {:error, msg}  | 
 | 39 | + end  | 
 | 40 | + end  | 
 | 41 | + | 
 | 42 | + @spec float(raw(), error_msg()) :: Result.t(error_msg(), float())  | 
 | 43 | + def float(value, msg) when raw?(value) and error_msg?(msg) do  | 
 | 44 | + case Float.parse(value) do  | 
 | 45 | + {f, ""} ->  | 
 | 46 | + {:ok, f}  | 
 | 47 | + | 
 | 48 | + _ ->  | 
 | 49 | + {:error, msg}  | 
 | 50 | + end  | 
 | 51 | + end  | 
 | 52 | + | 
 | 53 | + @spec true?(boolean(), error_msg()) :: Result.t(error_msg(), true)  | 
 | 54 | + def true?(true, _msg), do: {:ok, true}  | 
 | 55 | + def true?(false, msg), do: {:error, msg}  | 
 | 56 | + | 
 | 57 | + @spec in_list(a, [a], error_msg()) :: Result.t(error_msg(), a) when a: var  | 
 | 58 | + def in_list(value, list, msg) when is_list(list) and error_msg?(msg) do  | 
 | 59 | + if value in list do  | 
 | 60 | + {:ok, value}  | 
 | 61 | + else  | 
 | 62 | + {:error, msg}  | 
 | 63 | + end  | 
 | 64 | + end  | 
 | 65 | +end  | 
0 commit comments