code: func resourceOutputs(resourceName string,
  	resource gocf.ResourceProperties,
  	logger *logrus.Logger) ([]string, error) {
  
  	outputProps := []string{}
  	switch typedResource := resource.(type) {
  	case gocf.IAMRole:
  		// NOP
  	case *gocf.DynamoDBTable:
  		if typedResource.StreamSpecification != nil {
  			outputProps = append(outputProps, "StreamArn")
  		}
  	case gocf.DynamoDBTable:
  		if typedResource.StreamSpecification != nil {
  			outputProps = append(outputProps, "StreamArn")
  		}
  	case gocf.KinesisStream,
  		*gocf.KinesisStream:
  		outputProps = append(outputProps, "Arn")
  	case gocf.Route53RecordSet,
  		*gocf.Route53RecordSet:
  		// NOP
  	case gocf.S3Bucket,
  		*gocf.S3Bucket:
  		outputProps = append(outputProps, "DomainName", "WebsiteURL")
  	case gocf.SNSTopic,
  		*gocf.SNSTopic:
  		outputProps = append(outputProps, "TopicName")
  	case gocf.SQSQueue,
  		*gocf.SQSQueue:
  		outputProps = append(outputProps, "Arn", "QueueName")
  	default:
  		logger.WithFields(logrus.Fields{
  			"ResourceType": fmt.Sprintf("%T", typedResource),
  		}).Warn("Discovery information for dependency not yet implemented")
  	}
  	return outputProps, nil
  }
docs: // resourceOutputs is responsible for returning the conditional
  // set of CloudFormation outputs for a given resource type.