Current section
Files
Jump to
Current section
Files
lib/xml_builder/format.ex
defmodule XmlBuilder.Format do
@moduledoc ~S"""
Base behaviour for all the formatters. There are two defauls formatters
included: `XmlBuilder.Format.None` and `XmlBuilder.Format.Indented`.
To introduce the new formatter, one should `use XmlBuilder.Format` and
possibly override `indent/1` and/or `intersperse/0` implementation(s):
```elixir
defmodule MyCuteFormat do
use XmlBuilder.Format, indent: " ", intersperse: "\n"
end
```
"""
@callback intersperse() :: binary() | iodata()
@callback indent(non_neg_integer()) :: binary() | iodata()
defmacro __using__(opts) do
quote do
@behaviour XmlBuilder.Format
@indenter unquote(opts[:indent]) || "\t"
@intersperser unquote(opts[:intersperse]) || "\n"
@blanker unquote(opts[:blank]) || ""
@impl XmlBuilder.Format
def indent(level), do: String.duplicate(@indenter, level)
@impl XmlBuilder.Format
def intersperse, do: @intersperser
defoverridable indent: 1, intersperse: 0
end
end
end