lib/parser/all_queued_transfer_struct.ex

defmodule CWMP.Protocol.Parser.Messages.AllQueuedTransferStruct do
  use CWMP.Protocol.ParserHelpers
  alias CWMP.Protocol.Messages.AllQueuedTransferStruct

  def initial_acc do
    %AllQueuedTransferStruct{}
  end

  def end_element(state, ['CommandKey']) do
    update_acc(state, fn acc -> %AllQueuedTransferStruct{acc | commandkey: state.last_text} end)
  end

  def end_element(state, ['State']) do
    update_acc(state, fn acc -> %AllQueuedTransferStruct{acc | state: integerValue(state.last_text, fn(x) -> x in 1..3 end)} end)
  end

  def end_element(state, ['IsDownload']) do
    update_acc(state, fn acc -> %AllQueuedTransferStruct{acc | is_download: boolValue(state.last_text)} end)
  end

  def end_element(state, ['FileType']) do
    if hd(to_charlist(state.last_text)) not in [49,50,51,52,53,54,55,88] do
      raise "Invalid filetype"
    end
    update_acc(state, fn acc -> %AllQueuedTransferStruct{acc | filetype: state.last_text} end)
  end

  def end_element(state, ['FileSize']) do
    update_acc(state, fn acc -> %AllQueuedTransferStruct{acc | filesize: integerValue(state.last_text, fn(x) -> x >= 0 end)} end)
  end

  def end_element(state, ['TargetFileName']) do
    update_acc(state, fn acc -> %AllQueuedTransferStruct{acc | target_filename: state.last_text} end)
  end

end