class Aws::ParamValidator

def shape(ref, value, errors, context)

def shape(ref, value, errors, context)
  case ref.shape
  when StructureShape then structure(ref, value, errors, context)
  when ListShape then list(ref, value, errors, context)
  when MapShape then map(ref, value, errors, context)
  when DocumentShape then document(ref, value, errors, context)
  when StringShape
    unless value.is_a?(String)
      errors << expected_got(context, "a String", value)
    end
  when IntegerShape
    unless value.is_a?(Integer)
      errors << expected_got(context, "an Integer", value)
    end
  when FloatShape
    unless value.is_a?(Float)
      errors << expected_got(context, "a Float", value)
    end
  when TimestampShape
    unless value.is_a?(Time)
      errors << expected_got(context, "a Time object", value)
    end
  when BooleanShape
    unless [true, false].include?(value)
      errors << expected_got(context, "true or false", value)
    end
  when BlobShape
    unless value.is_a?(String)
      if streaming_input?(ref)
        unless io_like?(value, _require_size = false)
          errors << expected_got(
            context,
            "a String or IO like object that supports read and rewind",
            value
          )
        end
      elsif !io_like?(value, _require_size = true)
        errors << expected_got(
          context,
          "a String or IO like object that supports read, rewind, and size",
          value
        )
      end
    end
  else
    raise "unhandled shape type: #{ref.shape.class.name}"
  end
end