Sha256: 027f14cbe3041e18bf3f752c5a5d762ac29825d9ef93d5470df704e483830d8a

Contents?: true

Size: 1.79 KB

Versions: 31

Compression:

Stored size: 1.79 KB

Contents

# frozen_string_literal: true

module Aws
  # @api private
  module Structure

    def initialize(values = {})
      values.each do |k, v|
        self[k] = v
      end
    end

    # @return [Boolean] Returns `true` if this structure has a value
    #   set for the given member.
    def key?(member_name)
      !self[member_name].nil?
    end

    # @return [Boolean] Returns `true` if all of the member values are `nil`.
    def empty?
      values.compact == []
    end

    # Deeply converts the Structure into a hash.  Structure members that
    # are `nil` are omitted from the resultant hash.
    #
    # You can call #orig_to_h to get vanilla #to_h behavior as defined
    # in stdlib Struct.
    #
    # @return [Hash]
    def to_h(obj = self)
      case obj
      when Struct
        obj.each_pair.with_object({}) do |(member, value), hash|
          hash[member] = to_hash(value) unless value.nil?
        end
      when Hash
        obj.each.with_object({}) do |(key, value), hash|
          hash[key] = to_hash(value)
        end
      when Array
        obj.collect { |value| to_hash(value) }
      else
        obj
      end
    end
    alias to_hash to_h

    # Wraps the default #to_s logic with filtering of sensitive parameters.
    def to_s(obj = self)
      Aws::Log::ParamFilter.new.filter(obj, obj.class).to_s
    end

    class << self

      # @api private
      def new(*args)
        if args.empty?
          Aws::EmptyStructure
        else
          struct = Struct.new(*args)
          struct.send(:include, Aws::Structure)
          struct
        end
      end

      # @api private
      def self.included(base_class)
        base_class.send(:undef_method, :each)
      end

    end
  end

  # @api private
  class EmptyStructure < Struct.new('AwsEmptyStructure')
    include(Aws::Structure)
  end

end

Version data entries

31 entries across 31 versions & 1 rubygems

Version Path
aws-sdk-core-3.117.0 lib/aws-sdk-core/structure.rb
aws-sdk-core-3.116.0 lib/aws-sdk-core/structure.rb
aws-sdk-core-3.115.0 lib/aws-sdk-core/structure.rb
aws-sdk-core-3.114.3 lib/aws-sdk-core/structure.rb
aws-sdk-core-3.114.2 lib/aws-sdk-core/structure.rb
aws-sdk-core-3.114.1 lib/aws-sdk-core/structure.rb
aws-sdk-core-3.114.0 lib/aws-sdk-core/structure.rb
aws-sdk-core-3.113.1 lib/aws-sdk-core/structure.rb
aws-sdk-core-3.113.0 lib/aws-sdk-core/structure.rb
aws-sdk-core-3.112.1 lib/aws-sdk-core/structure.rb
aws-sdk-core-3.112.0 lib/aws-sdk-core/structure.rb
aws-sdk-core-3.111.2 lib/aws-sdk-core/structure.rb
aws-sdk-core-3.111.1 lib/aws-sdk-core/structure.rb
aws-sdk-core-3.111.0 lib/aws-sdk-core/structure.rb
aws-sdk-core-3.110.0 lib/aws-sdk-core/structure.rb
aws-sdk-core-3.109.3 lib/aws-sdk-core/structure.rb
aws-sdk-core-3.109.2 lib/aws-sdk-core/structure.rb
aws-sdk-core-3.109.1 lib/aws-sdk-core/structure.rb
aws-sdk-core-3.109.0 lib/aws-sdk-core/structure.rb
aws-sdk-core-3.108.0 lib/aws-sdk-core/structure.rb