class Aws::S3::ObjectCopier

def copy_source(source)

def copy_source(source)
  case source
  when String then source
  when Hash
    src = "#{source[:bucket]}/#{escape(source[:key])}"
    src += "?versionId=#{source[:version_id]}" if source.key?(:version_id)
    src
  when S3::Object, S3::ObjectSummary
    "#{source.bucket_name}/#{escape(source.key)}"
  when S3::ObjectVersion
    "#{source.bucket_name}/#{escape(source.object_key)}?versionId=#{source.id}"
  else
    msg = "expected source to be an Aws::S3::Object, Hash, or String"
    raise ArgumentError, msg
  end
end