diff --git a/caste.go b/caste.go index a4859fb..00c8864 100644 --- a/caste.go +++ b/caste.go @@ -10,6 +10,7 @@ import ( "errors" "fmt" "html/template" + "net/url" "reflect" "strconv" "strings" @@ -70,6 +71,20 @@ func ToDurationE(i interface{}) (d time.Duration, err error) { } } +// ToURLE casts an interface to a *url.URL type. +func ToURLE(i interface{}) (u *url.URL, err error) { + i = indirect(i) + + switch v := i.(type) { + case url.URL: + return &v, nil + case string: + return url.Parse(v) + default: + return nil, fmt.Errorf("unable to cast %#v of type %T to URL", i, i) + } +} + // ToBoolE casts an interface to a bool type. func ToBoolE(i interface{}) (bool, error) { i = indirect(i)