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 'time'
require 'base64'
module Aws
module Rest
module Request
class Headers
include Seahorse::Model::Shapes
# @param [Seahorse::Model::ShapeRef] rules
def initialize(rules)
@rules = rules
end
# @param [Seahorse::Client::Http::Request] http_req
# @param [Hash] params
def apply(http_req, params)
@rules.shape.members.each do |name, ref|
value = params[name]
next if value.nil?
case ref.location
when 'header' then apply_header_value(http_req.headers, ref, value)
when 'headers' then apply_header_map(http_req.headers, ref, value)
end
end
end
private
def apply_header_value(headers, ref, value)
value = apply_json_trait(value) if ref['jsonvalue']
headers[ref.location_name] =
case ref.shape
when TimestampShape then timestamp(ref, value)
else value.to_s
end
end
def timestamp(ref, value)
case ref['timestampFormat'] || ref.shape['timestampFormat']
when 'unixTimestamp' then value.to_i
when 'iso8601' then value.utc.iso8601
else
# header default to rfc822
value.utc.httpdate
end
end
def apply_header_map(headers, ref, values)
prefix = ref.location_name || ''
values.each_pair do |name, value|
headers["#{prefix}#{name}"] = value.to_s
end
end
# With complex headers value in json syntax,
# base64 encodes value to aviod weird characters
# causing potential issues in headers
def apply_json_trait(value)
Base64.strict_encode64(value)
end
end
end
end
end
|