Packages
zoi
0.7.3
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/literal.ex
defmodule Zoi.Types.Literal do
@moduledoc false
use Zoi.Type.Def, fields: [:value]
def new(value, opts) do
opts = Keyword.merge([error: "invalid type: does not match literal"], opts)
apply_type(opts ++ [value: value])
end
defimpl Zoi.Type do
def parse(%Zoi.Types.Literal{value: value} = schema, input, _opts) do
if input === value do
{:ok, input}
else
{:error, schema.meta.error}
end
end
def type_spec(%Zoi.Types.Literal{value: value}, _opts) do
case value do
nil -> quote(do: nil)
true -> quote(do: true)
false -> quote(do: false)
_ when is_map(value) -> quote(do: map())
_ when is_list(value) -> quote(do: list())
value -> quote(do: unquote(value))
end
end
end
end