Sha256: 298ba08247c8dd51711560de14b7b78aaa1ffef1551f2e9dfd36be6fdf6be585

Contents?: true

Size: 1.61 KB

Versions: 10

Compression:

Stored size: 1.61 KB

Contents

require 'multi_json'
require 'base64'

module Aws
  module Json
    class Parser

      include Seahorse::Model::Shapes

      # @param [Seahorse::Model::Shapes::OutputShape] rules
      # @param [String<JSON>] json
      # @return [Hash]
      def parse(rules, json)
        json = '{}' if json == ''
        structure(rules, MultiJson.load(json, max_nesting: false))
      end

      # @param [Seahorse::Model::Shapes::OutputShape] rules
      # @param [String<JSON>] json
      # @return [Hash]
      def self.parse(rules, json)
        new.parse(rules, json)
      end

      private

      def structure(shape, values)
        data = Structure.new(shape.members.keys)
        values.each do |key, value|
          if member_shape = shape.serialized_members[key]
            data[member_shape.member_name] = member(member_shape, value)
          end
        end
        data
      end

      def list(shape, values)
        values.map { |value| member(shape.members, value) }
      end

      def map(shape, values)
        data = {}
        values.each do |key, value|
          data[key] = member(shape.members, value)
        end
        data
      end

      def member(shape, value)
        return nil if value.nil?
        case shape
        when StructureShape then structure(shape, value)
        when ListShape then list(shape, value)
        when MapShape then map(shape, value)
        when TimestampShape then time(value)
        when BlobShape then Base64.decode64(value)
        else value
        end
      end

      def time(value)
        value.is_a?(Numeric) ? Time.at(value) : Time.parse(value)
      end

    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
aws-sdk-core-2.0.0.rc10 lib/aws/json/parser.rb
aws-sdk-core-2.0.0.rc9 lib/aws/json/parser.rb
aws-sdk-core-2.0.0.rc8 lib/aws/json/parser.rb
aws-sdk-core-2.0.0.rc7 lib/aws/json/parser.rb
aws-sdk-core-2.0.0.rc6 lib/aws/json/parser.rb
aws-sdk-core-2.0.0.rc5 lib/aws/json/parser.rb
aws-sdk-core-2.0.0.rc4 lib/aws/json/parser.rb
aws-sdk-core-2.0.0.rc3 lib/aws/json/parser.rb
aws-sdk-core-2.0.0.rc2 lib/aws/json/parser.rb
aws-sdk-core-2.0.0.rc1 lib/aws/json/parser.rb