# `YAML`
[🔗](https://github.com/sruplex/yaml/blob/main/lib/yaml.ex#L1)

Documentation for YAML.

# `decode`

 Decodes YAML strings into Elixir data structures or AST.
## Options
  * `:detailed` - controls whether to return AST with metadata or simplified data
  (default: `false`)

    * `false` (default) - returns plain Elixir maps, lists, and primitives
    * `true` - returns full AST with metadata (line numbers, column numbers, tags)

  * `:return` - selects which decoded YAML documents are returned. It may be
    one of `:auto`, `:first_document` or `:all_documents`.

      * `:auto` (default) - automatically determines the return format based on
        the input. Single-document input returns the decoded value directly
        single document (map or list), while multi-document input returns a
        list with all decoded documents.
      * `:first_document` - returns only the first decoded YAML document.
      * `:all_documents` - returns all decoded YAML documents as a list.

  * `:enable_merge` - controls YAML merge key behavior (default: `true`)

      * `true` (default) - processes `<<` as merge keys (YAML 1.1 behavior)
      * `false` - treats `<<` as regular keys (YAML 1.2+ behavior)

  * `:atomize_keys` - controls whether map keys are converted to atoms (default: `false`)

      * `false` (default) - keeps all keys as binary strings
      * `:safe` - converts keys to atoms only if the atom already exists in the atom table
      * `true` - converts all keys to atoms (only use for trusted input)

  * `:yamerl_opts` - list of additional options passed directly to `:yamerl_constr`
    (default: `[]`). Note: `:str_node_as_binary` and `:detailed_constr` are always
    set internally and should not be passed here.

      * `{:schema, :failsafe | :json | :core | :yaml11}` - YAML schema for type resolution (default: `:core`)
      * `{:node_mods, [module()]}` - extra modules for custom node types (default: `[]`)
      * `{:keep_duplicate_keys, boolean()}` - preserve duplicate map keys (default: `false`)

## Examples

    iex> YAML.decode("- a: 1")
    {:ok, [[%{"a" => 1}]]}

    iex> YAML.decode("a: 1", return: :first_document)
    {:ok, %{"a" => 1}}

    iex> YAML.decode("a: 1", yamerl_opts: [{:schema, :core}, {:map_node_format, :map}])
    {:ok, [%{"a" => 1}]}

# `decode!`

---

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