Packages
zoi
0.8.4
0.18.7
0.18.6
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.4
0.17.3
0.17.2
0.17.1
0.17.0
0.16.1
0.16.0
0.15.0
0.14.1
0.14.0
0.13.1
0.13.0
0.12.1
0.12.0
0.11.1
0.11.0
0.10.7
0.10.6
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.1
0.9.0
0.9.0-rc.1
0.9.0-rc.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.0
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.3
0.1.2
0.1.1
0.1.0
Zoi is a schema validation library for Elixir, designed to provide a simple and flexible way to define and validate data.
Current section
Files
Jump to
Current section
Files
lib/zoi/types/number.ex
defmodule Zoi.Types.Number do
@moduledoc false
use Zoi.Type.Def, fields: [coerce: false]
def new(opts \\ []) do
opts = Keyword.merge([error: "invalid type: must be a number", coerce: false], opts)
apply_type(opts)
end
defimpl Zoi.Type do
def parse(schema, input, opts) do
coerce = Keyword.get(opts, :coerce, schema.coerce)
cond do
is_number(input) ->
{:ok, input}
coerce and is_binary(input) ->
coerce_number(schema, input)
true ->
error(schema)
end
end
defp coerce_number(schema, input) do
case Integer.parse(input) do
{number, ""} ->
{:ok, number}
{_number, _rest} ->
case Float.parse(input) do
{float, ""} -> {:ok, float}
_error -> error(schema)
end
_error ->
error(schema)
end
end
defp error(schema) do
{:error, schema.meta.error}
end
def type_spec(_schema, _opts) do
quote(do: number())
end
end
defimpl Inspect do
def inspect(type, opts) do
Zoi.Inspect.inspect_type(type, opts)
end
end
end