lavender/utils/url.go

39 lines
667 B
Go

package utils
import (
"encoding"
"net/url"
"path"
)
var _ encoding.TextMarshaler = (*URL)(nil)
var _ encoding.TextUnmarshaler = (*URL)(nil)
type URL struct{ *url.URL }
func MustParse(rawURL string) *URL {
u, err := url.Parse(rawURL)
if err != nil {
panic(err)
}
return &URL{u}
}
func (u *URL) Resolve(paths ...string) *URL {
return &URL{URL: u.URL.ResolveReference(&url.URL{Path: path.Join(paths...)})}
}
func (u *URL) MarshalText() (text []byte, err error) {
return []byte(u.URL.String()), nil
}
func (u *URL) UnmarshalText(text []byte) error {
parse, err := url.Parse(string(text))
if err != nil {
return err
}
u.URL = parse
return nil
}