Packages
jsv
0.15.2
0.21.2
0.21.1
0.21.0
0.20.0
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.3
0.18.2
0.18.1
0.18.0
0.17.1
0.17.0
0.16.0
0.15.2
0.15.1
0.15.0
0.14.0
0.13.1
0.13.0
0.12.0
0.11.5
0.11.4
0.11.3
retired
0.11.2
0.11.1
0.11.0
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.0
0.5.1
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
A JSON Schema Validator with complete support for the latest specifications.
Current section
Files
Jump to
Current section
Files
lib/jsv/cast.ex
defmodule JSV.Cast do
import JSV, only: [defcast: 2]
@moduledoc false
defcast string_to_integer(data) do
with true <- is_binary(data),
{int, ""} <- Integer.parse(data) do
{:ok, int}
else
_ -> {:error, "invalid integer representation"}
end
end
defcast string_to_float(data) do
with true <- is_binary(data),
{float, ""} <- Float.parse(data) do
{:ok, float}
else
_ -> {:error, "invalid floating point number representation"}
end
end
defcast string_to_number(data) do
with true <- is_binary(data),
{:ok, number} <- parse_number(data) do
{:ok, number}
else
_ -> {:error, "invalid number representation"}
end
end
defp parse_number(data) do
case Float.parse(data) do
{float, ""} ->
{:ok, float}
_ ->
case Integer.parse(data) do
{int, ""} -> {:ok, int}
_ -> :error
end
end
end
defcast string_to_boolean(data) do
case data do
"true" -> {:ok, true}
"false" -> {:ok, false}
_ -> {:error, "invalid boolean representation"}
end
end
defcast string_to_existing_atom(data) do
{:ok, String.to_existing_atom(data)}
rescue
ArgumentError -> {:error, "not an existing atom representation"}
end
defcast string_to_atom(data) do
if is_binary(data) do
{:ok, String.to_atom(data)}
else
{:error, "not an atom representation"}
end
end
defcast string_to_atom_or_nil(data) do
case data do
b when is_binary(b) -> {:ok, String.to_atom(data)}
nil -> {:ok, nil}
_ -> {:error, "not an atom representation or nil"}
end
end
@doc false
@spec format_error(term, term, term) :: binary
def format_error(_, message, _) do
message
end
end