code: func Interpolate(config map[string]interface{}, opts Options) (map[string]interface{}, error) {
  	if opts.LookupValue == nil {
  		opts.LookupValue = os.LookupEnv
  	}
  	if opts.TypeCastMapping == nil {
  		opts.TypeCastMapping = make(map[Path]Cast)
  	}
  	if opts.Substitute == nil {
  		opts.Substitute = template.Substitute
  	}
  
  	out := map[string]interface{}{}
  
  	for key, value := range config {
  		interpolatedValue, err := recursiveInterpolate(value, NewPath(key), opts)
  		if err != nil {
  			return out, err
  		}
  		out[key] = interpolatedValue
  	}
  
  	return out, nil
  }
docs: // Interpolate replaces variables in a string with the values from a mapping