Packages
zoi
0.14.0
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/function.ex
defmodule Zoi.Types.Function do
@moduledoc false
use Zoi.Type.Def, fields: [:arity]
def opts() do
Zoi.Opts.meta_opts()
|> Zoi.Types.Extend.new(arity: Zoi.Types.Integer.new(gte: 0, description: "Function arity"))
end
def new(opts \\ []) do
apply_type(opts)
end
defimpl Zoi.Type do
def parse(schema, input, _opts) when is_function(input) do
case schema.arity do
nil -> {:ok, input}
arity when is_function(input, arity) -> {:ok, input}
arity -> error_with_arity(schema, arity)
end
end
def parse(schema, _input, _opts) do
case schema.arity do
nil -> error(schema)
arity -> error_with_arity(schema, arity)
end
end
defp error(schema) do
{:error, Zoi.Error.invalid_type(:function, error: schema.meta.error)}
end
defp error_with_arity(schema, arity) do
{:error,
Zoi.Error.invalid_type(:function,
issue: "invalid type: expected function of arity #{arity}",
error: schema.meta.error
)}
end
end
defimpl Zoi.TypeSpec do
def spec(_schema, _opts), do: quote(do: function())
end
defimpl Inspect do
def inspect(type, opts) do
Zoi.Inspect.build(type, opts, arity: type.arity)
end
end
defimpl Zoi.Describe.Encoder do
def encode(_schema), do: "`t:function/0`"
end
end