Current section

Files

Jump to
xml_stream lib xml_stream.ex
Raw

lib/xml_stream.ex

defmodule XmlStream do
def declaration(attrs \\ [version: "1.0", encoding: "UTF-8"]) do
[{:decl, attrs}]
end
def empty_element(name, args \\ %{}) do
[{:empty_elem, name, args}]
end
def element(name, body) do
element(name, %{}, body)
end
def element(name, attrs, body) do
[[{:open, name, attrs}], body, [{:close, name}]]
end
def content(value) do
[{:const, value}]
end
def stream(node, options) do
printer = options[:printer]
nodes_stream = stream_builder(node)
Stream.transform(nodes_stream, printer.init(), &printer.print/2)
end
defp stream_builder(node) do
Stream.flat_map(node, fn
operation when is_tuple(operation) -> [operation]
operation -> stream_builder(operation)
end)
end
end