lib/serum/template.ex

defmodule Serum.Template do
  @moduledoc "Defines a struct which stores a template and its information."

  @type t() :: %__MODULE__{
          name: binary(),
          type: type(),
          file: binary(),
          ast: Macro.t(),
          include_resolved?: boolean()
        }

  @type collection() :: %{optional(binary()) => t()}
  @type type() :: :template | :include

  defstruct name: "",
            type: :template,
            file: nil,
            ast: nil,
            include_resolved?: false

  @spec new(Macro.t(), binary(), type(), binary()) :: t()
  def new(ast, name, type, path) do
    %__MODULE__{
      name: name,
      type: type,
      file: path,
      ast: ast,
      include_resolved?: false
    }
  end
end