# File lib/aws/sns/topic.rb, line 362
      def endpoint_opts(endpoint, opts = {})

        case
        when endpoint.is_a?(SQS::Queue)

          # auto add a policy to the queue to allow the topic
          # to send the queue messages
          unless opts[:update_policy] == false
            policy = endpoint.policy || SQS::Policy.new
            policy.allow(
              :principal => :any, 
              :actions => [:send_message], 
              :resources => [endpoint]
            ).where(:source_arn).is(arn)
            endpoint.policy = policy
          end
          
          { :protocol => 'sqs', :endpoint => endpoint.arn }

        when endpoint =~ /^arn:/
          raise ArgumentError, "expected a queue ARN" unless
            endpoint =~ /^arn:aws:sqs:/
          { :protocol => "sqs", :endpoint => endpoint }
        when endpoint.kind_of?(URI)
          { :protocol => endpoint.scheme,
            :endpoint => endpoint.to_s }
        when endpoint =~ /^(https?):/
          { :protocol => $1, :endpoint => endpoint }
        when endpoint.include?("@")
          { :protocol => opts[:json] ? "email-json" : "email",
            :endpoint => endpoint }
        when endpoint.gsub(/\D/,'') =~ /\d{11,15}/
          { :protocol => "sms", :endpoint => endpoint.gsub(/\D/,'') }
        else
          raise ArgumentError, "could not determine protocol for '#{endpoint}'"
        end
      end