Current section
Files
Jump to
Current section
Files
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)
acc = printer.init()
Stream.transform(nodes_stream, acc, fn i, acc ->
printer.print(i, acc)
end)
end
defp stream_builder(node) do
Stream.flat_map(node, fn operation ->
if is_tuple(operation) do
[operation]
else
stream_builder(operation)
end
end)
end
end