Skip to main content

lib/types.ex

defmodule EnvGuard.Types do
  @moduledoc """
  Shared type definitions for the supported cast targets and constraints.

  These are the single source of truth referenced by `EnvGuard`,
  `EnvGuard.Cast`, and `EnvGuard.Constraints`, and must enumerate exactly the
  clauses those modules implement.
  """

  @typedoc "A type an environment variable value can be cast to."
  @type type ::
          :boolean
          | :string
          | :atom
          | :charlist
          | :integer
          | :float
          | {:list, type()}
          | {:enum, [String.t()]}

  @typedoc "A constraint that can be checked against a cast value."
  @type constraint ::
          {:length, integer()}
          | {:min_length, integer()}
          | {:max_length, integer()}
          | {:min, integer()}
          | {:max, integer()}
          | {:allow_empty?, boolean()}
end