Packages
zoi
0.5.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/datetime.ex
defmodule Zoi.Types.DateTime do
@moduledoc false
use Zoi.Type.Def, fields: [coerce: false]
def new(opts \\ []) do
apply_type(opts)
end
defimpl Zoi.Type do
def parse(_schema, %DateTime{} = input, _opts) do
{:ok, input}
end
def parse(schema, input, opts) do
coerce = Keyword.get(opts, :coerce, schema.coerce)
case coerce do
true -> coerce(schema, input)
_false -> error(schema)
end
end
defp coerce(schema, input) when is_binary(input) do
case DateTime.from_iso8601(input) do
{:error, _reason} ->
error(schema)
{:ok, parsed, _offset} ->
{:ok, parsed}
end
end
defp coerce(schema, input) when is_integer(input) do
case DateTime.from_unix(input) do
{:error, _reason} ->
error(schema)
{:ok, parsed} ->
{:ok, parsed}
end
end
defp coerce(schema, _input) do
error(schema)
end
defp error(schema) do
{:error, schema.meta.error || "invalid type: must be a datetime"}
end
end
end