From 3cc9db95ac54775867d8d451e9c176e400410b2a Mon Sep 17 00:00:00 2001 From: Chance Zibolski Date: Wed, 18 Feb 2015 18:56:24 -0800 Subject: [PATCH] Add ToDuration --- cast.go | 5 +++++ caste.go | 16 ++++++++++++++++ 2 files changed, 21 insertions(+) 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))