# `Nvir.Cast`
[🔗](https://github.com/lud/nvir/blob/v0.16.3/lib/nvir/cast.ex#L1)

Collection of casters for environment variables.

# `caster`

```elixir
@type caster() ::
  :string
  | :string?
  | :string!
  | :atom
  | :atom?
  | :atom!
  | :existing_atom
  | :existing_atom?
  | :existing_atom!
  | :boolean
  | :boolean!
  | :boolean?
  | :integer!
  | :integer?
  | :integer
  | :float!
  | :float?
  | :float
  | (term() -&gt; result())
```

# `result`

```elixir
@type result() ::
  {:ok, term()} | {:error, String.t()} | {:error, :empty} | {:error, :bad_cast}
```

# `cast`

```elixir
@spec cast(term(), caster()) :: result()
@spec cast(String.t(), caster()) :: result()
```

Casts the given value to the desired type.

Environment variables are always defined as a string. Thus, the `cast/2`
function will only accept strings for the `value` argument.

Accepts a built-in caster or a custom function returning `{:ok, value}` or
`{:error, String.t()}`. You may as well directly return an error tuple from a
recursive `cast/2` call.

The list of built-in casters is described in the [reading environment
variables](guides/var-reading/the-env-functions.md#built-in-casters) guide.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
