Sha256: a181562aadce93e72b35ff4d734f028c74e96cd361910328f18d3b6eb55b1f9c

Contents?: true

Size: 1.96 KB

Versions: 37

Compression:

Stored size: 1.96 KB

Contents

# frozen_string_literal: true

module Aws
  module Rest
    # NOTE: headers could be already populated if specified on input shape
    class ContentTypeHandler < Seahorse::Client::Handler
      def call(context)
        if eventstream?(context)
          context.http_request.headers['Content-Type'] ||=
            'application/vnd.amazon.eventstream'
        elsif (payload = context.operation.input[:payload_member])
          case payload.shape
          when Seahorse::Model::Shapes::BlobShape
            context.http_request.headers['Content-Type'] ||=
              'application/octet-stream'
          when Seahorse::Model::Shapes::StringShape
            context.http_request.headers['Content-Type'] ||=
              'text/plain'
          else
            apply_default_content_type(context)
          end
        elsif (body = context.http_request.body) &&
              (!body.respond_to?(:size) || non_empty_body?(body))
          apply_default_content_type(context)
        end

        @handler.call(context)
      end

      private

      def non_empty_body?(body)
        body.respond_to?(:size) && body.size.positive?
      end

      def eventstream?(context)
        context.operation.input.shape.members.each do |_, ref|
          return true if ref.eventstream
        end
        false
      end

      # content-type defaults as noted here:
      # rest-json: https://smithy.io/2.0/aws/protocols/aws-restxml-protocol.html#content-type
      # rest-xml: https://smithy.io/2.0/aws/protocols/aws-restxml-protocol.html#content-type
      def apply_default_content_type(context)
        protocol = context.config.api.metadata['protocol']
        case protocol
        when 'rest-json'
          context.http_request.headers['Content-Type'] ||=
            'application/json'
        when 'rest-xml'
          context.http_request.headers['Content-Type'] ||=
            'application/xml'
        else raise "Unsupported protocol #{protocol}"
        end
      end
    end
  end
end

Version data entries

37 entries across 37 versions & 1 rubygems

Version Path
aws-sdk-core-3.220.2 lib/aws-sdk-core/rest/content_type_handler.rb
aws-sdk-core-3.220.1 lib/aws-sdk-core/rest/content_type_handler.rb
aws-sdk-core-3.220.0 lib/aws-sdk-core/rest/content_type_handler.rb
aws-sdk-core-3.219.0 lib/aws-sdk-core/rest/content_type_handler.rb
aws-sdk-core-3.218.1 lib/aws-sdk-core/rest/content_type_handler.rb
aws-sdk-core-3.218.0 lib/aws-sdk-core/rest/content_type_handler.rb
aws-sdk-core-3.217.1 lib/aws-sdk-core/rest/content_type_handler.rb
aws-sdk-core-3.217.0 lib/aws-sdk-core/rest/content_type_handler.rb
aws-sdk-core-3.216.1 lib/aws-sdk-core/rest/content_type_handler.rb
aws-sdk-core-3.216.0 lib/aws-sdk-core/rest/content_type_handler.rb
aws-sdk-core-3.215.1 lib/aws-sdk-core/rest/content_type_handler.rb
aws-sdk-core-3.215.0 lib/aws-sdk-core/rest/content_type_handler.rb
aws-sdk-core-3.214.1 lib/aws-sdk-core/rest/content_type_handler.rb
aws-sdk-core-3.214.0 lib/aws-sdk-core/rest/content_type_handler.rb
aws-sdk-core-3.213.0 lib/aws-sdk-core/rest/content_type_handler.rb
aws-sdk-core-3.212.0 lib/aws-sdk-core/rest/content_type_handler.rb
aws-sdk-core-3.211.0 lib/aws-sdk-core/rest/content_type_handler.rb
aws-sdk-core-3.210.0 lib/aws-sdk-core/rest/content_type_handler.rb
aws-sdk-core-3.209.1 lib/aws-sdk-core/rest/content_type_handler.rb
aws-sdk-core-3.209.0 lib/aws-sdk-core/rest/content_type_handler.rb