Sha256: a88a614b6cdd6d563badc54f910369d3cba021f8aea79cbeaaf725baab206d96

Contents?: true

Size: 1.44 KB

Versions: 47

Compression:

Stored size: 1.44 KB

Contents

# frozen_string_literal: true

require 'bigdecimal'
require 'stringio'
require 'set'

module Aws
  module DynamoDBStreams
    # @api private
    class AttributeValue

      def initialize
        @unmarshaler = Unmarshaler.new
      end

      def unmarshal(value)
        @unmarshaler.format(value)
      end

      class Unmarshaler

        def format(obj)
          type, value = extract_type_and_value(obj)
          case type
          when :m
            value.each.with_object({}) do |(k, v), map|
              map[k] = format(v)
            end
          when :l then value.map { |v| format(v) }
          when :s then value
          when :n then BigDecimal(value)
          when :b then StringIO.new(value)
          when :null then nil
          when :bool then value
          when :ss then Set.new(value)
          when :ns then Set.new(value.map { |n| BigDecimal(n) })
          when :bs then Set.new(value.map { |b| StringIO.new(b) })
          else
            raise ArgumentError, "unhandled type #{type.inspect}"
          end
        end

        private

        def extract_type_and_value(obj)
          case obj
          when Hash then obj.to_a.first
          when Struct
            obj.members.each do |key|
              value = obj[key]
              return [key, value] unless value.nil?
            end
          else
            raise ArgumentError, "unhandled type #{obj.inspect}"
          end
        end

      end
    end
  end
end

Version data entries

47 entries across 47 versions & 1 rubygems

Version Path
aws-sdk-dynamodbstreams-1.73.0 lib/aws-sdk-dynamodbstreams/attribute_value.rb
aws-sdk-dynamodbstreams-1.72.0 lib/aws-sdk-dynamodbstreams/attribute_value.rb
aws-sdk-dynamodbstreams-1.71.0 lib/aws-sdk-dynamodbstreams/attribute_value.rb
aws-sdk-dynamodbstreams-1.70.0 lib/aws-sdk-dynamodbstreams/attribute_value.rb
aws-sdk-dynamodbstreams-1.69.0 lib/aws-sdk-dynamodbstreams/attribute_value.rb
aws-sdk-dynamodbstreams-1.68.1 lib/aws-sdk-dynamodbstreams/attribute_value.rb
aws-sdk-dynamodbstreams-1.68.0 lib/aws-sdk-dynamodbstreams/attribute_value.rb
aws-sdk-dynamodbstreams-1.67.0 lib/aws-sdk-dynamodbstreams/attribute_value.rb
aws-sdk-dynamodbstreams-1.66.0 lib/aws-sdk-dynamodbstreams/attribute_value.rb
aws-sdk-dynamodbstreams-1.65.0 lib/aws-sdk-dynamodbstreams/attribute_value.rb
aws-sdk-dynamodbstreams-1.64.0 lib/aws-sdk-dynamodbstreams/attribute_value.rb
aws-sdk-dynamodbstreams-1.63.0 lib/aws-sdk-dynamodbstreams/attribute_value.rb
aws-sdk-dynamodbstreams-1.62.0 lib/aws-sdk-dynamodbstreams/attribute_value.rb
aws-sdk-dynamodbstreams-1.61.0 lib/aws-sdk-dynamodbstreams/attribute_value.rb
aws-sdk-dynamodbstreams-1.60.0 lib/aws-sdk-dynamodbstreams/attribute_value.rb
aws-sdk-dynamodbstreams-1.59.0 lib/aws-sdk-dynamodbstreams/attribute_value.rb
aws-sdk-dynamodbstreams-1.58.0 lib/aws-sdk-dynamodbstreams/attribute_value.rb
aws-sdk-dynamodbstreams-1.56.0 lib/aws-sdk-dynamodbstreams/attribute_value.rb
aws-sdk-dynamodbstreams-1.55.0 lib/aws-sdk-dynamodbstreams/attribute_value.rb
aws-sdk-dynamodbstreams-1.54.0 lib/aws-sdk-dynamodbstreams/attribute_value.rb