55 lines
907 B
Go
55 lines
907 B
Go
|
package parser
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"io"
|
||
|
"io/ioutil"
|
||
|
"path/filepath"
|
||
|
)
|
||
|
|
||
|
// File that is to be parsed
|
||
|
type File struct {
|
||
|
io.Reader
|
||
|
Path string
|
||
|
AbsPath string
|
||
|
}
|
||
|
|
||
|
// Name of the file "app.go"
|
||
|
func (f File) Name() string {
|
||
|
return f.Path
|
||
|
}
|
||
|
|
||
|
// String returns the contents of the reader
|
||
|
func (f *File) String() string {
|
||
|
src, _ := ioutil.ReadAll(f)
|
||
|
f.Reader = bytes.NewReader(src)
|
||
|
return string(src)
|
||
|
}
|
||
|
|
||
|
func (s *File) Write(p []byte) (int, error) {
|
||
|
bb := &bytes.Buffer{}
|
||
|
i, err := bb.Write(p)
|
||
|
s.Reader = bb
|
||
|
return i, err
|
||
|
}
|
||
|
|
||
|
// NewFile takes the name of the file you want to
|
||
|
// write to and a reader to reader from
|
||
|
func NewFile(path string, r io.Reader) *File {
|
||
|
if r == nil {
|
||
|
r = &bytes.Buffer{}
|
||
|
}
|
||
|
if seek, ok := r.(io.Seeker); ok {
|
||
|
seek.Seek(0, 0)
|
||
|
}
|
||
|
abs := path
|
||
|
if !filepath.IsAbs(path) {
|
||
|
abs, _ = filepath.Abs(path)
|
||
|
}
|
||
|
return &File{
|
||
|
Reader: r,
|
||
|
Path: path,
|
||
|
AbsPath: abs,
|
||
|
}
|
||
|
}
|