func()

in lib/mime.go [77:119]


func (l mimeLib) transformMIME(arg0, arg1 ref.Val) ref.Val {
	input, ok := arg0.(types.Bytes)
	if !ok {
		return types.ValOrErr(input, "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)
	}

	switch transform := transform.(type) {
	case func([]byte):
		c := make([]byte, len(input))
		copy(c, input)
		transform(c)
		return types.Bytes(c)
	case func(io.Reader) io.Reader:
		var buf bytes.Buffer
		_, err := io.Copy(&buf, transform(bytes.NewReader(input)))
		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(bytes.NewReader(input))
		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(bytes.NewReader(input))
	}
	return types.NewErr("invalid transform: %T", transform)
}