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  }