Zoi.ISO (Zoi v0.6.4)

View Source

This module defines schemas for ISO time, date, and datetime formats, along with transformations to convert them into Elixir's native types.

It includes built-in transformations to convert ISO time, date, and datetime strings into %Time{}, %Date{}, and %DateTime{} structs.

Summary

Basic Types

Defines a date type schema.

Defines a datetime type schema.

Defines a naive datetime type schema.

Defines a time type schema.

Transforms

Converts Zoi.ISO.date() to %Date{} struct.

Converts Zoi.ISO.datetime() to %DateTime{} struct.

Converts Zoi.ISO.naive_datetime() to %NaiveDateTime{} struct.

Converts Zoi.ISO.time() to %Time{} struct.

Functions

do_transform(arg1, input, arg3)

Basic Types

date(opts \\ [])

Defines a date type schema.

Example

iex> schema = Zoi.ISO.date()
iex> Zoi.parse(schema, "2025-08-07")
{:ok, "2025-08-07"}
iex> Zoi.parse(schema, "2025-02-30")
{:error, [%Zoi.Error{message: "invalid type: must be an ISO date"}]}

datetime(opts \\ [])

Defines a datetime type schema.

Example

iex> schema = Zoi.ISO.datetime()
iex> Zoi.parse(schema, "2025-08-07T10:04:22+03:00")
{:ok, "2025-08-07T10:04:22+03:00"}

iex> schema = Zoi.ISO.datetime()
iex> Zoi.parse(schema, 1754646043)
{:error, [%Zoi.Error{message: "invalid type: must be an ISO datetime"}]}

naive_datetime(opts \\ [])

Defines a naive datetime type schema.

Example

iex> schema = Zoi.ISO.naive_datetime()
iex> Zoi.parse(schema, "2025-08-07T10:04:22")
{:ok, "2025-08-07T10:04:22"}

iex> schema = Zoi.ISO.naive_datetime()
iex> Zoi.parse(schema, 1754646043)
{:error, [%Zoi.Error{message: "invalid type: must be an ISO naive datetime"}]}

time(opts \\ [])

Defines a time type schema.

Example

iex> schema = Zoi.ISO.time()
iex> Zoi.parse(schema, "12:34:56")
{:ok, "12:34:56"}
iex> Zoi.parse(schema, "25:00:00")
{:error, [%Zoi.Error{message: "invalid type: must be an ISO time"}]}

Transforms

to_date_struct(schema)

Converts Zoi.ISO.date() to %Date{} struct.

Example

iex> schema = Zoi.ISO.date() |> Zoi.ISO.to_date_struct()
iex> Zoi.parse(schema, "2025-08-07")
{:ok, ~D[2025-08-07]}

to_datetime_struct(schema)

Converts Zoi.ISO.datetime() to %DateTime{} struct.

Example

iex> schema = Zoi.ISO.datetime() |> Zoi.ISO.to_datetime_struct()
iex> Zoi.parse(schema, "2025-08-07T10:04:22+03:00")
{:ok, ~U[2025-08-07 07:04:22Z]}

to_naive_datetime_struct(schema)

Converts Zoi.ISO.naive_datetime() to %NaiveDateTime{} struct.

Example

iex> schema = Zoi.ISO.naive_datetime() |> Zoi.ISO.to_naive_datetime_struct()
iex> Zoi.parse(schema, "2025-08-07T10:04:22")
{:ok, ~N[2025-08-07 10:04:22]}

to_time_struct(schema)

Converts Zoi.ISO.time() to %Time{} struct.

Example

iex> schema = Zoi.ISO.time() |> Zoi.ISO.to_time_struct()
iex> Zoi.parse(schema, "12:34:56")
{:ok, ~T[12:34:56]}