github.com/free5gc/openapi@v1.0.8/convert.go (about) 1 package openapi 2 3 import ( 4 "fmt" 5 "reflect" 6 "time" 7 8 "github.com/mitchellh/mapstructure" 9 ) 10 11 func openAPIDecodeHook(from reflect.Type, to reflect.Type, v interface{}) (interface{}, error) { 12 // convert OpenAPI DateTime to time.Time based on RFC3339 13 if to == reflect.TypeOf(time.Time{}) && from == reflect.TypeOf("") { 14 return time.Parse(time.RFC3339, v.(string)) 15 } 16 return v, nil 17 } 18 19 // Convert - convert map[string]interface{} to openapi models 20 func Convert(from interface{}, to interface{}) error { 21 config := mapstructure.DecoderConfig{ 22 DecodeHook: openAPIDecodeHook, 23 Result: to, 24 } 25 26 decoder, err := mapstructure.NewDecoder(&config) 27 if err != nil { 28 return fmt.Errorf("openapi: converter setup failed: %v", err) 29 } 30 31 err = decoder.Decode(from) 32 if err != nil { 33 return fmt.Errorf("openapi: convert to %v failed: %v", reflect.TypeOf(to), err) 34 } 35 36 return nil 37 }