diff --git a/cast.go b/cast.go index 9c607fa..fe382ca 100644 --- a/cast.go +++ b/cast.go @@ -17,6 +17,11 @@ func ToTime(i interface{}) time.Time { return v } +func ToDuration(i interface{}) time.Duration { + v, _ := ToDurationE(i) + return v +} + func ToFloat64(i interface{}) float64 { v, _ := ToFloat64E(i) return v diff --git a/caste.go b/caste.go index 11a06fb..72c7690 100644 --- a/caste.go +++ b/caste.go @@ -35,6 +35,22 @@ func ToTimeE(i interface{}) (tim time.Time, err error) { } } +func ToDurationE(i interface{}) (d time.Duration, err error) { + i = indirect(i) + jww.DEBUG.Println("ToDurationE called on type:", reflect.TypeOf(i)) + + switch s := i.(type) { + case time.Duration: + return s, nil + case string: + d, err = time.ParseDuration(s) + return + default: + err = fmt.Errorf("Unable to Cast %#v to Duration\n", i) + return + } +} + func ToBoolE(i interface{}) (bool, error) { i = indirect(i) jww.DEBUG.Println("ToBoolE called on type:", reflect.TypeOf(i))