code: func (c *Converter) convert(sv, dv reflect.Value, scope *scope) error {
  	dt, st := dv.Type(), sv.Type()
  	// Apply default values.
  	if fv, ok := c.defaultingFuncs[st]; ok {
  		if c.Debug != nil {
  			c.Debug.Logf("Applying defaults for '%v'", st)
  		}
  		args := []reflect.Value{sv.Addr()}
  		fv.Call(args)
  	}
  
  	// Convert sv to dv.
  	if fv, ok := c.conversionFuncs[typePair{st, dt}]; ok {
  		if c.Debug != nil {
  			c.Debug.Logf("Calling custom conversion of '%v' to '%v'", st, dt)
  		}
  		return c.callCustom(sv, dv, fv, scope)
  	}
  	if fv, ok := c.generatedConversionFuncs[typePair{st, dt}]; ok {
  		if c.Debug != nil {
  			c.Debug.Logf("Calling custom conversion of '%v' to '%v'", st, dt)
  		}
  		return c.callCustom(sv, dv, fv, scope)
  	}
  
  	return c.defaultConvert(sv, dv, scope)
  }
docs: // convert recursively copies sv into dv, calling an appropriate conversion function if
  // one is registered.