func()

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)
}