summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Flint <[email protected]>2021-08-17 12:24:43 -0700
committerAlex Flint <[email protected]>2021-08-17 12:24:43 -0700
commit9e23a0e262d0bbebfd57c6dc6e34f2f84a37dbd5 (patch)
tree9e10da02cd39f085f57f5a1439f27ef7dc72a54f
parentf33108a28e6a688d20eb35a9f081de2c926ad6e5 (diff)
add support for url.URL
-rw-r--r--scalar.go11
-rw-r--r--scalar_test.go4
2 files changed, 14 insertions, 1 deletions
diff --git a/scalar.go b/scalar.go
index 073392c..421bfac 100644
--- a/scalar.go
+++ b/scalar.go
@@ -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")
}