Sha256: 3fbeae5815d1876ff7a84ca8bab1c6c4c84b43f03fe6120eb84a96e9f0a459a5

Contents?: true

Size: 1.8 KB

Versions: 997

Compression:

Stored size: 1.8 KB

Contents

require 'base64'
require 'time'

module Aws
  module Json
    class Parser

      include Seahorse::Model::Shapes

      # @param [Seahorse::Model::ShapeRef] rules
      def initialize(rules)
        @rules = rules
      end

      # @param [String<JSON>] json
      def parse(json, target = nil)
        parse_ref(@rules, Json.load(json), target)
      end

      private

      def structure(ref, values, target = nil)
        shape = ref.shape
        target = ref[:struct_class].new if target.nil?
        values.each do |key, value|
          member_name, member_ref = shape.member_by_location_name(key)
          if member_ref
            target[member_name] = parse_ref(member_ref, value)
          end
        end
        target
      end

      def list(ref, values, target = nil)
        target = [] if target.nil?
        values.each do |value|
          target << parse_ref(ref.shape.member, value)
        end
        target
      end

      def map(ref, values, target = nil)
        target = {} if target.nil?
        values.each do |key, value|
          target[key] = parse_ref(ref.shape.value, value)
        end
        target
      end

      def parse_ref(ref, value, target = nil)
        if value.nil?
          nil
        else
          case ref.shape
          when StructureShape then structure(ref, value, target)
          when ListShape then list(ref, value, target)
          when MapShape then map(ref, value, target)
          when TimestampShape then time(value)
          when BlobShape then Base64.decode64(value)
          when BooleanShape then value.to_s == 'true'
          else value
          end
        end
      end

      # @param [String, Integer] value
      # @return [Time]
      def time(value)
        value.is_a?(Numeric) ? Time.at(value) : Time.parse(value)
      end

    end
  end
end

Version data entries

997 entries across 997 versions & 2 rubygems

Version Path
aws-sdk-core-2.11.632 lib/aws-sdk-core/json/parser.rb
aws-sdk-core-2.11.631 lib/aws-sdk-core/json/parser.rb
aws-sdk-core-2.11.630 lib/aws-sdk-core/json/parser.rb
aws-sdk-core-2.11.629 lib/aws-sdk-core/json/parser.rb
aws-sdk-core-2.11.628 lib/aws-sdk-core/json/parser.rb
aws-sdk-core-2.11.627 lib/aws-sdk-core/json/parser.rb
aws-sdk-core-2.11.626 lib/aws-sdk-core/json/parser.rb
aws-sdk-core-2.11.625 lib/aws-sdk-core/json/parser.rb
aws-sdk-core-2.11.624 lib/aws-sdk-core/json/parser.rb
aws-sdk-core-2.11.623 lib/aws-sdk-core/json/parser.rb
aws-sdk-core-2.11.622 lib/aws-sdk-core/json/parser.rb
aws-sdk-core-2.11.621 lib/aws-sdk-core/json/parser.rb
aws-sdk-core-2.11.620 lib/aws-sdk-core/json/parser.rb
aws-sdk-core-2.11.619 lib/aws-sdk-core/json/parser.rb
aws-sdk-core-2.11.618 lib/aws-sdk-core/json/parser.rb
aws-sdk-core-2.11.617 lib/aws-sdk-core/json/parser.rb
aws-sdk-core-2.11.616 lib/aws-sdk-core/json/parser.rb
aws-sdk-core-2.11.615 lib/aws-sdk-core/json/parser.rb
aws-sdk-core-2.11.614 lib/aws-sdk-core/json/parser.rb
aws-sdk-core-2.11.613 lib/aws-sdk-core/json/parser.rb