1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
# frozen_string_literal: true
require_relative 'cbor'
require_relative 'rpc_v2/builder'
require_relative 'rpc_v2/content_type_handler'
require_relative 'rpc_v2/error_handler'
require_relative 'rpc_v2/handler'
require_relative 'rpc_v2/parser'
module Aws
# @api private
module RpcV2
class << self
# @param [Symbol,Class] engine
# Must be one of the following values:
#
# * :cbor
#
def engine=(engine)
@engine = Class === engine ? engine : load_engine(engine)
end
# @return [Class] Returns the default engine.
# One of:
#
# * {CborEngine}
#
def engine
set_default_engine unless @engine
@engine
end
def encode(data)
@engine.encode(data)
end
def decode(bytes)
bytes.force_encoding(Encoding::BINARY)
@engine.decode(bytes)
end
def set_default_engine
[:cbor].each do |name|
@engine ||= try_load_engine(name)
end
unless @engine
raise 'Unable to find a compatible cbor library.'
end
end
private
def load_engine(name)
require "aws-sdk-core/rpc_v2/#{name}_engine"
const_name = name[0].upcase + name[1..-1] + 'Engine'
const_get(const_name)
end
def try_load_engine(name)
load_engine(name)
rescue LoadError
false
end
end
set_default_engine
end
end
|