func setDefaultsHook()

in pkg/asyncapi/v2/decode.go [93:114]


func setDefaultsHook(_ reflect.Type, to reflect.Type, data interface{}) (interface{}, error) {
	if !to.Implements(reflect.TypeOf((*MapStructureDefaultsProvider)(nil)).Elem()) {
		return data, nil
	}

	var toType reflect.Type
	switch to.Kind() { //nolint:exhaustive
	case reflect.Array, reflect.Chan, reflect.Map, reflect.Ptr, reflect.Slice:
		toType = to.Elem()
	default:
		toType = to
	}

	defaults := reflect.New(toType).Interface().(MapStructureDefaultsProvider).MapStructureDefaults()
	for k, v := range defaults {
		if _, ok := data.(map[string]interface{})[k]; !ok {
			data.(map[string]interface{})[k] = v
		}
	}

	return data, nil
}