auth/internal/domain/url.go

74 lines
946 B
Go
Raw Normal View History

2021-12-29 20:06:54 +00:00
package domain
import (
2021-12-30 00:27:52 +00:00
"net/url"
2021-12-29 20:06:54 +00:00
"strconv"
"testing"
http "github.com/valyala/fasthttp"
)
type URL struct {
*http.URI
}
2022-01-29 14:57:54 +00:00
func ParseURL(src string) (*URL, error) {
u := http.AcquireURI()
if err := u.Parse(nil, []byte(src)); err != nil {
2021-12-29 20:06:54 +00:00
return nil, err
}
2022-01-29 14:57:54 +00:00
return &URL{URI: u}, nil
2021-12-29 20:06:54 +00:00
}
func TestURL(tb testing.TB, src string) *URL {
tb.Helper()
u := http.AcquireURI()
u.Update(src)
return &URL{
URI: u,
}
}
func (u *URL) UnmarshalForm(v []byte) error {
2022-01-29 14:57:54 +00:00
url, err := ParseURL(string(v))
2021-12-29 20:06:54 +00:00
if err != nil {
return err
}
*u = *url
return nil
}
func (u *URL) UnmarshalJSON(v []byte) error {
src, err := strconv.Unquote(string(v))
if err != nil {
return err
}
2022-01-29 14:57:54 +00:00
url, err := ParseURL(src)
2021-12-29 20:06:54 +00:00
if err != nil {
return err
}
*u = *url
return nil
}
2021-12-30 00:27:52 +00:00
2022-01-12 18:04:40 +00:00
func (u URL) URL() *url.URL {
2021-12-30 00:27:52 +00:00
if u.URI == nil {
return nil
}
result, err := url.ParseRequestURI(u.URI.String())
if err != nil {
return nil
}
return result
}