github.com/operator-framework/operator-lifecycle-manager@v0.30.0/pkg/lib/codec/mapstructure.go (about) 1 package codec 2 3 import ( 4 "reflect" 5 "time" 6 7 "github.com/mitchellh/mapstructure" 8 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 9 ) 10 11 func MetaTimeHookFunc() mapstructure.DecodeHookFunc { 12 return metaTimeHookFunc 13 } 14 15 func metaTimeHookFunc(f, t reflect.Type, data interface{}) (interface{}, error) { 16 if t != reflect.TypeOf(metav1.Time{}) { 17 return data, nil 18 } 19 20 var ( 21 tm time.Time 22 err error 23 ) 24 switch f.Kind() { 25 case reflect.String: 26 tm, err = time.Parse(time.RFC3339, data.(string)) 27 case reflect.Float64: 28 tm = time.Unix(0, int64(data.(float64))*int64(time.Millisecond)) 29 case reflect.Int64: 30 tm = time.Unix(0, data.(int64)*int64(time.Millisecond)) 31 default: 32 return data, nil 33 } 34 35 if err != nil { 36 return nil, err 37 } 38 39 return metav1.NewTime(tm), nil 40 }