/
fs.go
50 lines (41 loc) · 936 Bytes
/
fs.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package parse
import (
"bytes"
"io"
"github.com/antlr/antlr4/runtime/Go/antlr"
"github.com/anz-bank/sysl/pkg/mod"
"github.com/sirupsen/logrus"
"github.com/spf13/afero"
)
func fileExists(filename string, fs afero.Fs) bool {
f, err := fs.Open(filename)
if err != nil {
return false
}
defer f.Close()
logrus.Debugf("opened file %s", f.Name())
_, err = f.Stat()
return err == nil
}
type fsFileStream struct {
*antlr.InputStream
filename string
}
func newFSFileStream(filename string, fs afero.Fs) (s *fsFileStream, m *mod.Module, err error) {
var f afero.File
switch t := fs.(type) {
case *mod.Fs:
f, m, err = t.OpenWithModule(filename)
default:
f, err = fs.Open(filename)
}
if err != nil {
return nil, nil, err
}
defer f.Close()
var buf bytes.Buffer
if _, err = io.Copy(&buf, f); err != nil {
return nil, nil, err
}
return &fsFileStream{antlr.NewInputStream(buf.String()), filename}, m, nil
}