code: func NewSource(opts ...SrcOption) (*Source, error) {
  	s := &Source{
  		records: make(chan map[string]interface{}, 100),
  		errors:  make(chan error),
  	}
  	for _, opt := range opts {
  		opt(s)
  	}
  	var err error
  	s.sess, err = session.NewSession(&aws.Config{
  		Region: aws.String(s.region)},
  	)
  	if err != nil {
  		return nil, errors.Wrap(err, "getting new source")
  	}
  	s.s3 = s3.New(s.sess)
  	resp, err := s.s3.ListObjects(&s3.ListObjectsInput{Bucket: aws.String(s.bucket), Prefix: aws.String(s.prefix)})
  	if err != nil {
  		return nil, errors.Wrap(err, "listing objects")
  	}
  	s.objects = resp.Contents
  
  	go s.populateRecords()
  
  	return s, nil
  }
docs: // NewSource returns a new Source with the options applied.