Sha256: 16059e4e522d74cd7319437d0a2c66877f3a4c4b009cb9452051f75877e5fd9e

Contents?: true

Size: 1.6 KB

Versions: 20

Compression:

Stored size: 1.6 KB

Contents

# frozen_string_literal: true

require 'base64'

module Aws
  module RpcV2
    class Builder
      include Seahorse::Model::Shapes

      def initialize(rules, _options = {})
        @rules = rules
      end

      def serialize(params)
        # If the input shape is empty, do not set a body. This is
        # different than if the input shape is a structure with no members.
        return nil if @rules.shape.struct_class == EmptyStructure

        Cbor.encode(format(@rules, params))
      end

      private

      def structure(ref, values)
        shape = ref.shape
        values.each_pair.with_object({}) do |(key, value), data|
          if shape.member?(key) && !value.nil?
            member_ref = shape.member(key)
            member_name = member_ref.location_name || key
            data[member_name] = format(member_ref, value)
          end
        end
      end

      def list(ref, values)
        member_ref = ref.shape.member
        values.collect { |value| format(member_ref, value) }
      end

      def map(ref, values)
        value_ref = ref.shape.value
        values.each.with_object({}) do |(key, value), data|
          data[key] = format(value_ref, value)
        end
      end

      def blob(value)
        (String === value ? value : value.read).force_encoding(Encoding::BINARY)
      end

      def format(ref, value)
        case ref.shape
        when StructureShape then structure(ref, value)
        when ListShape      then list(ref, value)
        when MapShape       then map(ref, value)
        when BlobShape      then blob(value)
        else value
        end
      end
    end
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
aws-sdk-core-3.210.0 lib/aws-sdk-core/rpc_v2/builder.rb
aws-sdk-core-3.209.1 lib/aws-sdk-core/rpc_v2/builder.rb
aws-sdk-core-3.209.0 lib/aws-sdk-core/rpc_v2/builder.rb
aws-sdk-core-3.208.0 lib/aws-sdk-core/rpc_v2/builder.rb
aws-sdk-core-3.207.0 lib/aws-sdk-core/rpc_v2/builder.rb
aws-sdk-core-3.206.0 lib/aws-sdk-core/rpc_v2/builder.rb
aws-sdk-core-3.205.0 lib/aws-sdk-core/rpc_v2/builder.rb
aws-sdk-core-3.204.0 lib/aws-sdk-core/rpc_v2/builder.rb
aws-sdk-core-3.203.0 lib/aws-sdk-core/rpc_v2/builder.rb
aws-sdk-core-3.202.2 lib/aws-sdk-core/rpc_v2/builder.rb
aws-sdk-core-3.202.1 lib/aws-sdk-core/rpc_v2/builder.rb
aws-sdk-core-3.202.0 lib/aws-sdk-core/rpc_v2/builder.rb
aws-sdk-core-3.201.5 lib/aws-sdk-core/rpc_v2/builder.rb
aws-sdk-core-3.201.4 lib/aws-sdk-core/rpc_v2/builder.rb
aws-sdk-core-3.201.3 lib/aws-sdk-core/rpc_v2/builder.rb
aws-sdk-core-3.201.2 lib/aws-sdk-core/rpc_v2/builder.rb
aws-sdk-core-3.201.1 lib/aws-sdk-core/rpc_v2/builder.rb
aws-sdk-core-3.201.0 lib/aws-sdk-core/rpc_v2/builder.rb
aws-sdk-core-3.200.0 lib/aws-sdk-core/rpc_v2/builder.rb
aws-sdk-core-3.199.0 lib/aws-sdk-core/rpc_v2/builder.rb