go-judge/cmd/executorserver/grpc_file.go
2020-06-02 19:43:18 -04:00

68 lines
1.1 KiB
Go

package main
import (
"os"
"github.com/criyle/go-judge/filestore"
)
type fileStreamIn struct {
name string
r, w *os.File
}
func newFileStreamIn(name string) (*fileStreamIn, error) {
r, w, err := os.Pipe()
if err != nil {
return nil, err
}
return &fileStreamIn{name: name, r: r, w: w}, nil
}
func (f *fileStreamIn) Name() string {
return f.name
}
func (f *fileStreamIn) Write(b []byte) (int, error) {
return f.w.Write(b)
}
func (f *fileStreamIn) EnvFile(fs filestore.FileStore) (interface{}, error) {
return f.r, nil
}
func (f *fileStreamIn) Close() error {
f.r.Close()
return f.w.Close()
}
type fileStreamOut struct {
name string
r, w *os.File
}
func newFileStreamOut(name string) (*fileStreamOut, error) {
r, w, err := os.Pipe()
if err != nil {
return nil, err
}
return &fileStreamOut{name: name, r: r, w: w}, nil
}
func (f *fileStreamOut) Name() string {
return f.name
}
func (f *fileStreamOut) Read(b []byte) (int, error) {
return f.r.Read(b)
}
func (f *fileStreamOut) EnvFile(fs filestore.FileStore) (interface{}, error) {
return f.w, nil
}
func (f *fileStreamOut) Close() error {
f.w.Close()
return f.r.Close()
}