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