diff options
Diffstat (limited to 'internal/datafs/stdinfs.go')
| -rw-r--r-- | internal/datafs/stdinfs.go | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/internal/datafs/stdinfs.go b/internal/datafs/stdinfs.go index 46cb030a..f6a02c51 100644 --- a/internal/datafs/stdinfs.go +++ b/internal/datafs/stdinfs.go @@ -18,7 +18,8 @@ func NewStdinFS(_ *url.URL) (fs.FS, error) { } type stdinFS struct { - ctx context.Context + ctx context.Context + data []byte } //nolint:gochecknoglobals @@ -46,9 +47,15 @@ func (f *stdinFS) Open(name string) (fs.File, error) { } } - stdin := StdinFromContext(f.ctx) + if err := f.readData(); err != nil { + return nil, &fs.PathError{ + Op: "open", + Path: name, + Err: err, + } + } - return &stdinFile{name: name, body: stdin}, nil + return &stdinFile{name: name, body: bytes.NewReader(f.data)}, nil } func (f *stdinFS) ReadFile(name string) ([]byte, error) { @@ -60,9 +67,32 @@ func (f *stdinFS) ReadFile(name string) ([]byte, error) { } } + if err := f.readData(); err != nil { + return nil, &fs.PathError{ + Op: "readFile", + Path: name, + Err: err, + } + } + + return f.data, nil +} + +func (f *stdinFS) readData() error { + if f.data != nil { + return nil + } + stdin := StdinFromContext(f.ctx) - return io.ReadAll(stdin) + b, err := io.ReadAll(stdin) + if err != nil { + return err + } + + f.data = b + + return nil } type stdinFile struct { |
