Sha256: ef4c7b8c8342a1ebc7245ddfeb8d0506db96ee436df2083412013ac9347ce7ea

Contents?: true

Size: 902 Bytes

Versions: 1

Compression:

Stored size: 902 Bytes

Contents

require 'active_support/core_ext/module/attribute_accessors'
require 'active_support/core_ext/string/inflections'

module Pio
  module OpenFlow
    # Error message parser
    module ErrorMessage
      mattr_reader(:type) { 1 }

      # rubocop:disable AbcSize
      def read(binary)
        body = OpenFlow::Header.read(binary).body
        error = const_get(:BodyParser).read(body)
        klass = error_classes.find do |each|
          each.name.split('::').last.underscore == error.error_type.to_s
        end
        unless klass
          raise 'Unknown error message '\
               "(type=#{error.error_type}, code=#{error.error_code})"
        end
        klass.read binary
      end
      # rubocop:enable AbcSize

      def error_classes
        OpenFlow::Message.descendants.select do |each|
          each.parents.include? parent.const_get(:Error)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pio-0.30.1 lib/pio/open_flow/error_message.rb