(dest interface{}, cacheStore *sync.Map, namer Namer)
| 391 | } |
| 392 | |
| 393 | func getOrParse(dest interface{}, cacheStore *sync.Map, namer Namer) (*Schema, error) { |
| 394 | modelType := reflect.ValueOf(dest).Type() |
| 395 | |
| 396 | if modelType.Kind() != reflect.Struct { |
| 397 | for modelType.Kind() == reflect.Slice || modelType.Kind() == reflect.Array || modelType.Kind() == reflect.Ptr { |
| 398 | modelType = modelType.Elem() |
| 399 | } |
| 400 | |
| 401 | if modelType.Kind() != reflect.Struct { |
| 402 | if modelType.PkgPath() == "" { |
| 403 | return nil, fmt.Errorf("%w: %+v", ErrUnsupportedDataType, dest) |
| 404 | } |
| 405 | return nil, fmt.Errorf("%w: %s.%s", ErrUnsupportedDataType, modelType.PkgPath(), modelType.Name()) |
| 406 | } |
| 407 | } |
| 408 | |
| 409 | if v, ok := cacheStore.Load(modelType); ok { |
| 410 | return v.(*Schema), nil |
| 411 | } |
| 412 | |
| 413 | return Parse(dest, cacheStore, namer) |
| 414 | } |
no test coverage detected