diff options
| author | Alex Flint <[email protected]> | 2021-08-17 12:34:34 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-08-17 12:34:34 -0700 |
| commit | fd60e966956efb1720cbfbf449fb55971209b2db (patch) | |
| tree | 9e10da02cd39f085f57f5a1439f27ef7dc72a54f | |
| parent | f33108a28e6a688d20eb35a9f081de2c926ad6e5 (diff) | |
| parent | 9e23a0e262d0bbebfd57c6dc6e34f2f84a37dbd5 (diff) | |
Merge pull request #8 from alexflint/parse-urlsv1.1.0
Add support for url.URL
| -rw-r--r-- | scalar.go | 11 | ||||
| -rw-r--r-- | scalar_test.go | 4 |
2 files changed, 14 insertions, 1 deletions
@@ -8,6 +8,7 @@ import ( "fmt" "net" "net/mail" + "net/url" "reflect" "strconv" "time" @@ -19,6 +20,7 @@ var ( durationType = reflect.TypeOf(time.Duration(0)) mailAddressType = reflect.TypeOf(mail.Address{}) macType = reflect.TypeOf(net.HardwareAddr{}) + urlType = reflect.TypeOf(url.URL{}) ) var ( @@ -86,6 +88,13 @@ func ParseValue(v reflect.Value, s string) error { } v.Set(reflect.ValueOf(ip)) return nil + case url.URL: + url, err := url.Parse(s) + if err != nil { + return err + } + v.Set(reflect.ValueOf(*url)) + return nil } // Switch on kind so that we can handle derived types @@ -136,7 +145,7 @@ func CanParse(t reflect.Type) bool { // Check for other special types switch t { - case durationType, mailAddressType, macType: + case durationType, mailAddressType, macType, urlType: return true } diff --git a/scalar_test.go b/scalar_test.go index 9a1ef6a..737675a 100644 --- a/scalar_test.go +++ b/scalar_test.go @@ -2,6 +2,7 @@ package scalar import ( "net" + "net/url" "reflect" "testing" "time" @@ -77,6 +78,9 @@ func TestParseValue(t *testing.T) { // MAC addresses assertParse(t, net.HardwareAddr("\x01\x23\x45\x67\x89\xab"), "01:23:45:67:89:ab") + // URL + assertParse(t, url.URL{Scheme: "https", Host: "example.com", Path: "/a/b/c"}, "https://example.com/a/b/c") + // custom text unmarshaler assertParse(t, textUnmarshaler{3}, "abc") } |
