lib/type/timestamp.ex

# Copyright(c) 2015-2023 ACCESS CO., LTD. All rights reserved.

use Croma
alias Croma.Result, as: R
alias Antikythera.Time

defmodule Antikythera.IsoTimestamp do
  @moduledoc """
  A strict subset of ISO8601 format of timestamp.
  """

  @type t :: String.t()

  defun valid?(v :: term) :: boolean do
    t when is_binary(t) -> Time.from_iso_timestamp(t) |> R.ok?()
    _ -> false
  end
end

defmodule Antikythera.IsoTimestamp.Basic do
  @moduledoc """
  ISO8601 basic format.
  """

  @type t :: String.t()

  defun valid?(v :: term) :: boolean do
    t when is_binary(t) -> Time.from_iso_basic(t) |> R.ok?()
    _ -> false
  end
end