28 lines
587 B
Go
28 lines
587 B
Go
|
package rest
|
||
|
|
||
|
import (
|
||
|
"net/url"
|
||
|
|
||
|
"github.com/pkg/errors"
|
||
|
)
|
||
|
|
||
|
// URLJoin joins a URL and a path returning a new URL
|
||
|
//
|
||
|
// path should be URL escaped
|
||
|
func URLJoin(base *url.URL, path string) (*url.URL, error) {
|
||
|
rel, err := url.Parse(path)
|
||
|
if err != nil {
|
||
|
return nil, errors.Wrapf(err, "Error parsing %q as URL", path)
|
||
|
}
|
||
|
return base.ResolveReference(rel), nil
|
||
|
}
|
||
|
|
||
|
// URLEscape escapes URL path the in string using URL escaping rules
|
||
|
//
|
||
|
// This mimics url.PathEscape which only available from go 1.8
|
||
|
func URLEscape(in string) string {
|
||
|
var u url.URL
|
||
|
u.Path = in
|
||
|
return u.String()
|
||
|
}
|