code: func (d *driver) URLFor(ctx context.Context, path string, options map[string]interface{}) (string, error) {
  	if d.SecretKey == "" {
  		return "", storagedriver.ErrUnsupportedMethod{}
  	}
  
  	methodString := "GET"
  	method, ok := options["method"]
  	if ok {
  		if methodString, ok = method.(string); !ok {
  			return "", storagedriver.ErrUnsupportedMethod{}
  		}
  	}
  
  	if methodString == "HEAD" {
  		// A "HEAD" request on a temporary URL is allowed if the
  		// signature was generated with "GET", "POST" or "PUT"
  		methodString = "GET"
  	}
  
  	supported := false
  	for _, method := range d.TempURLMethods {
  		if method == methodString {
  			supported = true
  			break
  		}
  	}
  
  	if !supported {
  		return "", storagedriver.ErrUnsupportedMethod{}
  	}
  
  	expiresTime := time.Now().Add(20 * time.Minute)
  	expires, ok := options["expiry"]
  	if ok {
  		et, ok := expires.(time.Time)
  		if ok {
  			expiresTime = et
  		}
  	}
  
  	tempURL := d.Conn.ObjectTempUrl(d.Container, d.swiftPath(path), d.SecretKey, methodString, expiresTime)
  
  	if d.AccessKey != "" {
  		// On HP Cloud, the signature must be in the form of tenant_id:access_key:signature
  		url, _ := url.Parse(tempURL)
  		query := url.Query()
  		query.Set("temp_url_sig", fmt.Sprintf("%s:%s:%s", d.Conn.TenantId, d.AccessKey, query.Get("temp_url_sig")))
  		url.RawQuery = query.Encode()
  		tempURL = url.String()
  	}
  
  	return tempURL, nil
  }
docs: // URLFor returns a URL which may be used to retrieve the content stored at the given path.