in lib/file.go [182:232]
func (l fileLib) readMIMEFile(arg0, arg1 ref.Val) ref.Val {
path, ok := arg0.(types.String)
if !ok {
return types.ValOrErr(path, "no such overload for file path: %s", arg0.Type())
}
mimetype, ok := arg1.(types.String)
if !ok {
return types.ValOrErr(mimetype, "no such overload for mime type: %s", arg1.Type())
}
transform, ok := l.transforms[string(mimetype)]
if !ok {
return types.NewErr("unknown transform: %q", mimetype)
}
f, err := os.Open(string(path))
if err != nil {
return types.NewErr("file: %v", err)
}
defer f.Close()
switch transform := transform.(type) {
case func([]byte):
var buf bytes.Buffer
_, err := io.Copy(&buf, transformReader{
r: f, transform: transform,
})
if err != nil {
return types.NewErr("file: %v", err)
}
return types.Bytes(buf.Bytes())
case func(io.Reader) io.Reader:
var buf bytes.Buffer
_, err := io.Copy(&buf, transform(f))
if err != nil {
return types.NewErr("file: %v", err)
}
return types.Bytes(buf.Bytes())
case func(io.Reader) (io.Reader, error):
var buf bytes.Buffer
r, err := transform(f)
if err != nil {
return types.NewErr("file: %v", err)
}
_, err = io.Copy(&buf, r)
if err != nil {
return types.NewErr("file: %v", err)
}
return types.Bytes(buf.Bytes())
case func(io.Reader) ref.Val:
return transform(f)
}
return types.NewErr("invalid transform: %T", transform)
}