class AWS::Core::XmlGrammar::Parser

@private

def characters chars

def characters chars
  @frame.add_text(chars) if @frame
end

def end_element name

def end_element name
  @frame.close
  if @frame.parent_frame
    child_frame = @frame
    parent_frame = @frame.parent_frame
    parent_frame.consume_child_frame(child_frame)
  end
  @frame = @frame.parent_frame
end

def initialize context, customizations

def initialize context, customizations
  @context = context
  @customizations = customizations
end

def start_element element_name, attrs

def start_element element_name, attrs
  if @frame
    @frame = @frame.build_child_frame(element_name)
  else
    @frame = RootFrame.new(@context, @customizations)
  end
  # consume attributes the same way we consume nested xml elements
  attrs.each do |(attr_name, attr_value)|
    attr_frame = @frame.build_child_frame(attr_name)
    attr_frame.add_text(attr_value)
    @frame.consume_child_frame(attr_frame)
  end
end