Packages
zoi
0.9.0-rc.1
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/decimal.ex
if Code.ensure_loaded?(Decimal) do
defmodule Zoi.Types.Decimal do
@moduledoc false
use Zoi.Type.Def, fields: [coerce: false]
def new(opts) do
opts = Keyword.merge([coerce: false], opts)
apply_type(opts)
end
defimpl Zoi.Type do
import Decimal, only: [is_decimal: 1]
def parse(schema, input, opts) do
coerce = Keyword.get(opts, :coerce, schema.coerce)
cond do
is_decimal(input) ->
{:ok, input}
coerce == true ->
case Decimal.cast(input) do
{:ok, decimal} -> {:ok, decimal}
:error -> error(schema)
end
true ->
error(schema)
end
end
defp error(schema) do
{:error, Zoi.Error.invalid_type(:decimal, error: schema.meta.error)}
end
def type_spec(_schema, _opts) do
quote(do: Decimal.t())
end
end
defimpl Inspect do
def inspect(type, opts) do
Zoi.Inspect.inspect_type(type, opts)
end
end
end
end