defmodule CWMP.Protocol.Generator do
import XmlBuilder
@moduledoc """
Generation of CWMP XML messages, from Elixir data structures.
"""
@doc """
Generates a CWMP envelope from an Elixir data structure.
"""
def generate!(head, req, version \\ "1-4") do
element('SOAP-ENV:Envelope',
%{
'xmlns:SOAP-ENV': "http://schemas.xmlsoap.org/soap/envelope/",
'xmlns:SOAP-ENC': "http://schemas.xmlsoap.org/soap/encoding/",
'xmlns:xsi': "http://www.w3.org/2001/XMLSchema-instance",
'xmlns:xsd': "http://www.w3.org/2001/XMLSchema",
'xmlns:cwmp': "urn:dslforum-org:cwmp-#{version}"
},
[ element('SOAP-ENV:Header', [CWMP.Protocol.Generate.generate(head)]), element('SOAP-ENV:Body', [CWMP.Protocol.Generate.generate(req)]) ] ) |> generate;
end
@doc """
Non-throwing version of generate!.
"""
def generate(head, req, version \\ "1-4") do
try do
{:ok, generate!(head, req, version)}
catch
err -> {:error, err}
end
end
end