# `ToonEx.Encode`
[🔗](https://github.com/ohhi-vn/toon_ex/blob/v1.1.0/lib/toon_ex/encode/encode.ex#L1)

Main encoder for TOON format.

This module coordinates the encoding process, dispatching to specialized
encoders based on the type of value being encoded.

# `encode`

```elixir
@spec encode(
  ToonEx.Types.input(),
  keyword()
) :: {:ok, String.t()} | {:error, ToonEx.EncodeError.t()}
```

Encodes Elixir data to TOON format string.

## Options

  * `:indent` - Number of spaces for indentation (default: 2)
  * `:delimiter` - Delimiter for array values: "," | "\t" | "|" (default: ",")
  * `:length_marker` - Prefix for array length marker (default: nil)

## Examples

    iex> ToonEx.Encode.encode(%{"name" => "Alice", "age" => 30})
    {:ok, "age: 30\nname: Alice"}

    iex> ToonEx.Encode.encode(%{"tags" => ["elixir", "toon"]})
    {:ok, "tags[2]: elixir,toon"}

    iex> ToonEx.Encode.encode(nil)
    {:ok, "null"}

    iex> ToonEx.Encode.encode(%{"name" => "Alice"}, indent: 4)
    {:ok, "name: Alice"}

# `encode!`

```elixir
@spec encode!(
  ToonEx.Types.input(),
  keyword()
) :: String.t()
```

Encodes Elixir data to TOON format string, raising on error.

## Examples

    iex> ToonEx.Encode.encode!(%{"name" => "Alice"})
    "name: Alice"

    iex> ToonEx.Encode.encode!(%{"tags" => ["a", "b"]})
    "tags[2]: a,b"

# `encode_to_iodata!`

```elixir
@spec encode_to_iodata!(
  ToonEx.Types.input(),
  keyword()
) :: iodata()
```

---

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