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 }