defmodule CWMP.Protocol.Parser.Messages.Inform do defmodule DeviceIdStruct do use CWMP.Protocol.ParserHelpers alias CWMP.Protocol.Messages.DeviceIdStruct def initial_acc do %DeviceIdStruct{} end def end_element(state, ['Manufacturer']) do update_acc(state, fn acc -> %DeviceIdStruct{acc | manufacturer: state.last_text} end) end def end_element(state, ['OUI']) do update_acc(state, fn acc -> %DeviceIdStruct{acc | oui: state.last_text} end) end def end_element(state, ['ProductClass']) do update_acc(state, fn acc -> %DeviceIdStruct{acc | product_class: state.last_text} end) end def end_element(state, ['SerialNumber']) do update_acc(state, fn acc -> %DeviceIdStruct{acc | serial_number: state.last_text} end) end end defmodule EventStruct do use CWMP.Protocol.ParserHelpers alias CWMP.Protocol.Messages.EventStruct def initial_acc do %EventStruct{} end def end_element(state, ['EventCode']) do update_acc(state, fn acc -> %EventStruct{acc | code: state.last_text} end) end def end_element(state, ['CommandKey']) do update_acc(state, fn acc -> %EventStruct{acc | command_key: state.last_text} end) end end use CWMP.Protocol.ParserHelpers alias CWMP.Protocol.Messages.Inform def initial_acc do %Inform{} end def start_element(state, ['DeviceId'], _attribs, _uri) do push_handler(state, DeviceIdStruct) end def start_element(state, ['EventStruct', 'Event'], _attribs, _uri) do push_handler(state, EventStruct) end def start_element(state, ['ParameterValueStruct', 'ParameterList'], _attribs, _uri) do push_handler(state, CWMP.Protocol.Parser.Messages.ParameterValueStruct) end def end_element(state, ['DeviceId']) do update_acc(state, fn acc -> %Inform{acc | device_id: state.last_acc} end) end def end_element(state, ['EventStruct', 'Event']) do update_acc(state, fn acc -> %Inform{acc | events: acc.events ++ [state.last_acc]} end) end def end_element(state, ['ParameterValueStruct', 'ParameterList']) do update_acc(state, fn acc -> %Inform{acc | parameters: acc.parameters ++ [state.last_acc]} end) end def end_element(state, ['MaxEnvelopes']) do update_acc(state, fn cur -> %Inform{cur | max_envelopes: integerValue(state.last_text, fn x -> x > 0 end)} end) end def end_element(state, ['CurrentTime']) do update_acc(state, fn cur -> %Inform{cur | current_time: required_datetimeStructure(state.last_text)} end) end def end_element(state, ['RetryCount']) do update_acc(state, fn cur -> %Inform{cur | retry_count: integerValue(state.last_text, fn x -> x >= 0 end)} end) end end