Skip to content

Commit 647ad80

Browse files
committed
Added base validators
1 parent 4513b87 commit 647ad80

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

lib/validatex/validators.ex

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
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

Comments
 (0)