github.com/jmigpin/editor@v1.6.0/util/goutil/readsource.go (about)

     1  package goutil
     2  
     3  import (
     4  	"bytes"
     5  	"errors"
     6  	"io"
     7  	"io/ioutil"
     8  )
     9  
    10  // taken from: go/parser/interface.go:25:9
    11  func ReadSource(filename string, src interface{}) ([]byte, error) {
    12  	if src != nil {
    13  		switch s := src.(type) {
    14  		case string:
    15  			return []byte(s), nil
    16  		case []byte:
    17  			return s, nil
    18  		case *bytes.Buffer:
    19  			// is io.Reader, but src is already available in []byte form
    20  			if s != nil {
    21  				return s.Bytes(), nil
    22  			}
    23  		case io.Reader:
    24  			var buf bytes.Buffer
    25  			if _, err := io.Copy(&buf, s); err != nil {
    26  				return nil, err
    27  			}
    28  			return buf.Bytes(), nil
    29  		}
    30  		return nil, errors.New("invalid source")
    31  	}
    32  	return ioutil.ReadFile(filename)
    33  }