cue/load: use build.File to support "-"
Added test to test high-level usage for the eval command.
Change-Id: I00541817ef1a6a30580d27a0c2ccd3685602e846
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/5223
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/internal/encoding/encoding.go b/internal/encoding/encoding.go
index 22871ea..178d506 100644
--- a/internal/encoding/encoding.go
+++ b/internal/encoding/encoding.go
@@ -115,18 +115,24 @@
// type of f must be a data type, but does not have to be an encoding that
// can stream. stdin is used in case the file is "-".
func NewDecoder(f *build.File, cfg *Config) *Decoder {
- r, err := reader(f, cfg.Stdin)
- i := &Decoder{
- closer: r,
- err: err,
- filename: f.Filename,
- next: func() (ast.Expr, error) {
- if err == nil {
- err = io.EOF
- }
- return nil, io.EOF
- },
+ i := &Decoder{filename: f.Filename}
+ i.next = func() (ast.Expr, error) {
+ if i.err != nil {
+ return nil, i.err
+ }
+ return nil, io.EOF
}
+
+ if f, ok := f.Source.(*ast.File); ok {
+ i.file = f
+ i.closer = ioutil.NopCloser(strings.NewReader(""))
+ // TODO: verify input format for CUE.
+ return i
+ }
+
+ r, err := reader(f, cfg.Stdin)
+ i.closer = r
+ i.err = err
if err != nil {
return i
}