lib/ex_mustache.ex

defmodule ExMustache do
  @moduledoc ~S"""
  ExMustache is a fast mustache templating library for Elixir.

  ExMustache supports everything except lambda from mustache spec.
  """

  defmodule Error do
    defexception [:message]
  end

  @type t :: %ExMustache{template: any(), partials: map()}
  defstruct [:template, :partials]

  @doc """
  Parse the binary and create template which can be used to render

  ## Options
    * `:dir` - directory where partial templates are located.
  """
  @spec parse(String.t(), keyword()) :: t()
  def parse(template, opts \\ []), do: ExMustache.Parser.parse(template, opts)

  @doc """
  Renders template by interpolating map data. Map keys *must* be string type.

  Returns [iodata](https://hexdocs.pm/elixir/IO.html#module-io-data).
  """
  @spec render(t(), map()) :: iodata()
  def render(%ExMustache{template: template, partials: partials}, map),
    do: ExMustache.Renderer.render(template, partials, map)
end