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
|
# frozen_string_literal: true
module Aws
module Rest
module Request
class Body
include Seahorse::Model::Shapes
# @param [Class] serializer_class
# @param [Seahorse::Model::ShapeRef] rules
def initialize(serializer_class, rules)
@serializer_class = serializer_class
@rules = rules
end
# @param [Seahorse::Client::Http::Request] http_req
# @param [Hash] params
def apply(http_req, params)
http_req.body = build_body(params)
end
private
def build_body(params)
if streaming?
params[@rules[:payload]]
elsif @rules[:payload]
params = params[@rules[:payload]]
serialize(@rules[:payload_member], params) if params
else
params = body_params(params)
serialize(@rules, params) unless params.empty?
end
end
def streaming?
@rules[:payload] && (
BlobShape === @rules[:payload_member].shape ||
StringShape === @rules[:payload_member].shape
)
end
def serialize(rules, params)
@serializer_class.new(rules).serialize(params)
end
def body_params(params)
@rules.shape.members.inject({}) do |hash, (member_name, member_ref)|
if !member_ref.location && params.key?(member_name)
hash[member_name] = params[member_name]
end
hash
end
end
end
end
end
end
|