code: func (c *Converter) callCustom(sv, dv, custom reflect.Value, scope *scope) error {
  	if !sv.CanAddr() {
  		sv2 := reflect.New(sv.Type())
  		sv2.Elem().Set(sv)
  		sv = sv2
  	} else {
  		sv = sv.Addr()
  	}
  	if !dv.CanAddr() {
  		if !dv.CanSet() {
  			return scope.errorf("can't addr or set dest.")
  		}
  		dvOrig := dv
  		dv := reflect.New(dvOrig.Type())
  		defer func() { dvOrig.Set(dv) }()
  	} else {
  		dv = dv.Addr()
  	}
  	args := []reflect.Value{sv, dv, reflect.ValueOf(scope)}
  	ret := custom.Call(args)[0].Interface()
  	// This convolution is necessary because nil interfaces won't convert
  	// to errors.
  	if ret == nil {
  		return nil
  	}
  	return ret.(error)
  }
docs: // callCustom calls 'custom' with sv & dv. custom must be a conversion function.